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

Adding and Removing Event Listeners in Cocos 2D-X 3.2

本文关键字:删除 事件 监听器 添加 Cocos 2D-X      更新时间:2023-10-16

我正在尝试实现一种在类中启用和禁用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);

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

我想一定有一种简单的方法可以做到这一点。

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