【问题标题】:Adding and Removing Event Listeners in Cocos 2D-X 3.2Cocos 2D-X 3.2 添加和移除事件监听器
【发布时间】:2014-08-29 05:28:57
【问题描述】:

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

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);

错误表示cocos2d::EventListener 中不存在名为onTouchesBegan 的成员。

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

【问题讨论】:

  • 看看这个:cocos2d-x.org/wiki/…。我认为由于某些类重命名,您会遇到一些 3.2 的编译器错误,但这些很容易解决。

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


【解决方案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;
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 2022-12-24
    • 2019-07-22
    • 1970-01-01
    • 2011-12-30
    相关资源
    最近更新 更多