在Cocos 2D-X 3.2中添加和删除事件监听器
Adding and Removing Event Listeners in Cocos 2D-X 3.2
我正在尝试实现一种在类中启用和禁用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;
}
}
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- Android NDK传感器向事件队列报告奇怪的间隔
- WXWIDGETS将鼠标事件连接到WXPAINTDC上的形状对象以删除
- 从事件的迭代列表中删除元素
- 在事件循环启动后删除并创建新的 RTP 流
- C++使用 shared_ptr 安全地删除事件对象有效负载
- 删除密钥未触发 KeyUp 和 KeyDown 事件
- 事件在发布到Qt中的窗口时从队列中删除
- 如何枚举和删除窗口事件
- 复制STL:删除元素、用户定义函数作为参数和事件队列
- 在Cocos 2D-X 3.2中添加和删除事件监听器
- 为什么文件写入时会发生删除事件
- 如何在c++中侦听智能卡插入和删除事件
- 用户界面 - C++:在事件驱动系统中间接调用“删除此内容”(例如在GUI应用程序中)