Не могу заставить работать в многоплатформенном приложении cocos2d-x

Поэтому я пытаюсь создать простое приложение, используя новейшую сборку cocos2d-x, и по какой-то причине не могу подключиться. Вот мои занятия:

class GameLayer : public cocos2d::Layer
{
public:
static cocos2d::Layer* createLayer();
void update(float dt);
virtual bool init();
CREATE_FUNC(GameLayer);
private:
bool onTouchBegan(cocos2d::Touch* touch, cocos2d::Event* event);
void onTouchMoved(cocos2d::Touch* touch, cocos2d::Event* event);
void onTouchEnded(cocos2d::Touch* touch, cocos2d::Event* event);
};

cocos2d::Layer* GameLayer::createLayer()
{
GameLayer *layer = GameLayer::create();

return layer;
}

bool GameLayer::init()
{
if (!cocos2d::Layer::init())
{
return false;
}

this->schedule(schedule_selector(GameLayer::update));
this->setTouchEnabled(true);

return true;
}

void GameLayer::update(float dt)
{

}

bool GameLayer::onTouchBegan(cocos2d::Touch* touch, cocos2d::Event* event)
{
cocos2d::log("You touched %f, %f", touch->getLocationInView().x, touch->getLocationInView().y);
return true;
}
void GameLayer::onTouchMoved(cocos2d::Touch* touch, cocos2d::Event* event)
{

}
void GameLayer::onTouchEnded(cocos2d::Touch* touch, cocos2d::Event* event)
{

}

Я заметил, когда я звоню в setTouchEnabled называть это внутренним флагом под названием _running имеет значение false, поэтому фактически не регистрирует мои сенсорные события. Однако я не могу понять, почему это так. Я называю вещи неправильно или в неправильном порядке?

9

Решение

В настоящее время cocos2dx проходит капитальный ремонт библиотеки, и многое изменилось, включая регистрацию и распространение Touch. Вот как это работает сейчас:

GameLayer.h

class GameLayer : public cocos2d::Layer
{
public:
static cocos2d::Layer* createLayer();
void update(float dt);
virtual bool init();
CREATE_FUNC(GameLayer);

private:
virtual void onEnter();
virtual void onExit();

bool onTouchBegan(cocos2d::Touch* touch, cocos2d::Event* event);
void onTouchMoved(cocos2d::Touch* touch, cocos2d::Event* event);
void onTouchEnded(cocos2d::Touch* touch, cocos2d::Event* event);
};

GameLayer.cpp

cocos2d::Layer* GameLayer::createLayer()
{
GameLayer *layer = GameLayer::create();

return layer;
}

bool GameLayer::init()
{
if (!cocos2d::Layer::init())
{
return false;
}

this->schedule(schedule_selector(GameLayer::update));

return true;
}

void GameLayer::onEnter()
{
Layer::onEnter();

// Register Touch Event
auto dispatcher = Director::getInstance()->getEventDispatcher();
auto listener = EventListenerTouchOneByOne::create();

listener->onTouchBegan = CC_CALLBACK_2(GameLayer::onTouchBegan, this);
listener->onTouchMoved = CC_CALLBACK_2(GameLayer::onTouchMoved, this);
listener->onTouchEnded = CC_CALLBACK_2(GameLayer::onTouchEnded, this);

dispatcher->addEventListenerWithSceneGraphPriority(listener, this);
}

void GameLayer::onExit()
{
// You don't need to unregister listeners here as new API
// removes all linked listeners automatically in CCNode's destructor
// which is the base class for all cocos2d DRAWING classes

Layer::onExit();
}

void GameLayer::update(float dt)
{

}

bool GameLayer::onTouchBegan(cocos2d::Touch* touch, cocos2d::Event* event)
{
cocos2d::log("You touched %f, %f", touch->getLocationInView().x, touch->getLocationInView().y);
return true;
}

void GameLayer::onTouchMoved(cocos2d::Touch* touch, cocos2d::Event* event)
{

}

void GameLayer::onTouchEnded(cocos2d::Touch* touch, cocos2d::Event* event)
{

}

Надеюсь, поможет!

19

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector