cocos2d-x3.6两层Layer触摸事件传递
2017-07-07 08:53
387 查看
这里有一点要注意,我这个GameScene本身是一个Layer,然后里面的GameOver页面又是一个Layer。就是一个场景里面有两个层。
前面我们在init()里面添加的触摸事件并不能解决这里的问题,GameOver层弹出来以后,点击屏幕,连连看里面的小图标还能被点中,会动的。看init()里面的触摸事件:
这是init()里面的触摸,可以看到设置了触摸事件吞噬,listener->setSwallowTouches(true),然并卵。为什么:
在一个场景里面,如果有多个层,所有的层都必需要注册了触控事件才能进行控制。可以看到这里只是注册了当前层。所以如果只有initi()里面的触摸函数设置,是不能满足需求的。我需要当GameOver层弹出来的时候,后面的层不能被点击。
所以我们的GameOver也需要注册触摸事件:
最后一行:dispatcher->addEventListenerWithSceneGraphPriority(listener, layer);
这就是给layer层注册触摸事件。
由于GameOver层不需要做什么触摸逻辑,仅仅是把这个事件吞掉,不再向下传递,所有我直接用了几个空的Lambda表达式来做了。
然后可以看到,达到效果了。
版权声明:本文为博主原创文章,转载请注明出处 http://blog.csdn.net/dawn_moon
前面我们在init()里面添加的触摸事件并不能解决这里的问题,GameOver层弹出来以后,点击屏幕,连连看里面的小图标还能被点中,会动的。看init()里面的触摸事件:
auto dispatcher = Director::getInstance()->getEventDispatcher(); auto listener = EventListenerTouchOneByOne::create(); listener->setSwallowTouches(true); listener->onTouchBegan = CC_CALLBACK_2(GameScene::onTouchBegan, this); listener->onTouchMoved = CC_CALLBACK_2(GameScene::onTouchMoved, this); listener->onTouchEnded = CC_CALLBACK_2(GameScene::onTouchEnded, this); listener->onTouchCancelled = CC_CALLBACK_2(GameScene::onTouchCancelled, this); dispatcher->addEventListenerWithSceneGraphPriority(listener, this);
这是init()里面的触摸,可以看到设置了触摸事件吞噬,listener->setSwallowTouches(true),然并卵。为什么:
在一个场景里面,如果有多个层,所有的层都必需要注册了触控事件才能进行控制。可以看到这里只是注册了当前层。所以如果只有initi()里面的触摸函数设置,是不能满足需求的。我需要当GameOver层弹出来的时候,后面的层不能被点击。
所以我们的GameOver也需要注册触摸事件:
// Game Over层添加触摸事件 auto dispatcher = Director::getInstance()->getEventDispatcher(); auto listener = EventListenerTouchOneByOne::create(); // 吞掉触摸事件,即下面的层不会响应此次触摸 listener->setSwallowTouches(true); // Lambda表达式实现触摸函数,空的,因为不需要做触摸实现 listener->onTouchBegan = [](Touch*touch, Event* event){return true;}; listener->onTouchMoved = [](Touch*touch, Event* event){}; listener->onTouchEnded = [](Touch*touch, Event* event){}; listener->onTouchCancelled = [](Touch*touch, Event* event){}; // 加到GameOver层 dispatcher->addEventListenerWithSceneGraphPriority(listener, layer);
最后一行:dispatcher->addEventListenerWithSceneGraphPriority(listener, layer);
这就是给layer层注册触摸事件。
由于GameOver层不需要做什么触摸逻辑,仅仅是把这个事件吞掉,不再向下传递,所有我直接用了几个空的Lambda表达式来做了。
然后可以看到,达到效果了。
版权声明:本文为博主原创文章,转载请注明出处 http://blog.csdn.net/dawn_moon
相关文章推荐
- cocos2d-x js binding 防止触摸事件传递 - sslin
- cocos2d-x3.6 连连看触摸事件传递
- 在cocos2d上添加UIView,触摸事件往下传递
- cocos2d-js 遮挡层(禁止触摸事件传递层)
- cocos2d-x jsb 防止触摸事件传递
- cocos2d 触摸事件的传递
- cocos2d-x v3.x Lua 中 [cc.Layer] 如何不让触摸事件向下转递
- cocos2d-x jsb 防止触摸事件传递
- cocos2d-x触摸事件详细分析
- Android View触摸事件传递机制
- 触摸事件的传递机制
- IOS——触摸事件 视图检测和事件传递
- cocos2d触摸事件处理机制(2.x和3.x变化)
- cocos2d-x触摸事件优先级
- Android触摸事件传递
- cocos2d屏幕部分区域无法响应触摸事件
- ScrollView的上下联动事件 触摸事件传递机制
- android 触摸事件传递机制
- Cocos2d-x Win32键盘模拟触摸事件
- UI触摸手势,事件的分发传递