多次调用C++cocos2dx事件回调
C++ cocos2dx event callback called multiple times
Yo!我做了一个小实验,在这个实验中我有很多可触摸的方块。一旦触摸,块必须更改其属性,如大小、颜色和不透明度。但当我触摸一个区块时,分配给其他区块的回调也会被触发。我应该如何使用Cocos2dx的Event Dispatcher机制来只触发一个回调(一个,也是唯一分配给它的回调(?换句话说,如果我单击块A,分配给它的onTouchBegin回调将被触发。这是我的实际代码:
bool SimpleGameLayer::init() {
// ...
// begin loop here
auto square = DrawNode::create();
square->setContentSize( Size(square_size, square_size) );
// ...
square->drawSolidPoly(verts, 4, Color4F(0x8b/255.0, 0xb7/255.0, 0xc4/255.0, 1.0f));
addChild(square, 1);
// ...
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches( true );
listener->onTouchBegan = [](Touch* touch, Event* event) {
auto target = static_cast<DrawNode*>(event->getCurrentTarget());
log("TouchBegan on %s", target->getName().c_str());
return false;
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, square);
// ...
// end loop here
}
无论我触摸(或点击(哪个方块或正方形,我总是会得到一堆线:
TouchBegan on ....
TouchBegan on ....
TouchBegan on ....
TouchBegan on ....
TouchBegan on ....
我还通过添加具有不同优先级的所有方块来测试我的代码,但没有成功。
因为onTouchBegin一直返回false,所以它无法接受触摸。如果你只想让一个区块获得触摸事件,你需要在TouchBegin回调列表中更改这一点。
listener->onTouchBegan = [](Touch* touch, Event* event) {
auto target = static_cast<DrawNode*>(event->getCurrentTarget());
log("TouchBegan on %s", target->getName().c_str());
return true;
};
相关文章:
- 不带轮询的 SDL2 事件回调
- C++ 事件管理器的回调,使用 std::function 和 std:bind 以及派生类作为参数
- OpenCV 为键盘事件设置回调
- 如果事件在仍在执行时再次设置,RegisterWaitForSingleObject 是否会并行运行回调?
- 从C++回调函数发出节点.js事件
- 限制空闲事件的回调率,而无需阻止线程而无需多线程
- C++ / RS232C 串口 / 事件回调异步读取缓冲区 / 不使用线程
- std::函数,带有 SDL 事件回调的 lambda 错误
- C lambda回调为触发事件
- 使SDL称为纯虚拟成员作为事件回调
- SDL视频显示窗口:如何连接窗口关闭事件回调
- GSOAP HTTP事件回调
- 自己的std ::带有回调或事件的ISTREAM,以避免拉或阻止读取
- 垃圾回收事件的 LuaPlus 和 c++ 回调
- C++:使用回调函数作为事件通知程序
- cocos2d-x添加触摸事件回调错误
- wxFrame 和 wxTaskBarIcon 任务栏事件 Mac OSX:未触发回调
- 事件回调守护进程
- 多次调用C++cocos2dx事件回调
- 窗口事件回调函数C++的问题