2014-08-29 4 views
0

Я пытаюсь реализовать простой способ включения и отключения прослушивателя Touch в моем классе. Я пытался писать метод в моем классе:Добавление и удаление прослушивателей событий в Cocos 2D-X 3.2

void HelloWorld::setTouchEnabled(bool enabled) 
{ 
    if (enabled) 
    { 
     auto _touchListener = EventListenerTouchAllAtOnce::create(); 
     _touchListener->onTouchesBegan = CC_CALLBACK_2(HelloWorld::onTouchesBegan, this); 
     _eventDispatcher->addEventListenerWithSceneGraphPriority(_touchListener, this); 

    } 
    else if (!enabled) 
    { 
     _eventDispatcher->removeEventListener(_touchListener); 
    } 

} 

Я надеялся, чтобы иметь возможность затем вызвать setTouchEnabled(true) или setTouchEnabled(false) внутри каких-либо других методов в этом классе. Однако это не работает, так как в конце функции выдается _touchListener. Когда я попытался объявить EventListener *_touchListener в моем файле заголовка, я получил ошибку в XCode на этой линии:

_touchListener->onTouchesBegan = CC_CALLBACK_2(HelloWorld::onTouchesBegan, this); 

ошибка говорит, что ни один член не по имени onTouchesBegan существует в cocos2d::EventListener.

Я предполагаю, что должен быть простой способ сделать это.

+0

Взгляните на это: http://www.cocos2d-x.org/wiki/How_To_Subclass_Sprite_And_Add_Event_Listeners. Я думаю, вы получите несколько ошибок компилятора для 3.2 из-за переименования классов, но это простое исправление. – GameDeveloper

ответ

1

Вы должны научиться C++ первый :)

Определение _touchListener в файле заголовка первого, в качестве члена HelloWorld. Затем измените файл CPP:

void HelloWorld::setTouchEnabled(bool enabled) 
{ 
    if (enabled) 
    { 
     _touchListener = EventListenerTouchAllAtOnce::create(); 
     _touchListener->retain(); 
     _touchListener->onTouchesBegan = CC_CALLBACK_2(HelloWorld::onTouchesBegan, this); 
     _eventDispatcher->addEventListenerWithSceneGraphPriority(_touchListener, this); 

    } 
    else if (!enabled) 
    { 
     _eventDispatcher->removeEventListener(_touchListener); 
     _touchListener->release(); 
     _touchListener = nullptr; 
    } 

} 
+0

Спасибо за вашу помощь, я получил его на работу! – Kevin

Смежные вопросы