在Cocos 2D-X 3.2中添加和删除事件监听器

时间:2014-08-29 05:28:57

标签: c++ xcode cocos2d-x cocos2d-x-3.0

我正在尝试实现一种简单的方法来启用和禁用我班级中的Touch侦听器。我尝试在班上写一个方法:

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的成员。

我认为必须有一个简单的方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

你需要先学习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;
    }

}