cocos2d-x jsb 防止触摸事件传递
来源:互联网 发布:淘宝2016版本5.7.0下载 编辑:程序博客网 时间:2024/06/06 02:52
cocos2d-x jsb 防止触摸事件传递
在游戏中要实现消息弹窗,让用户点击确认,其他区域产生遮罩,阻挡下层的事件被点击到,这是个很常用的功能,在cocos2d-x中,可以通过为layer添加事件代理来实现:
pDirector->getTouchDispatcher()->addTargetedDelegate(this, priority, swallowsTouches);
三个参数分别是要添加触摸事件的node, 事件优先级(默认的-128, 是最小的数字, 具有最高优先级),是否吞噬触摸事件(true为停止事件传递)
这里简单说下2dx中的事件传递模型,这应该也是 2dx被开发者吐槽最多的地方:
* 2dx中的事件代理分为标准代理(addStandardDelegate)和目标代理(addTargetedDelegate);
* 标准代理是部分node默认的属性,通过setTouchEnbled开启和关闭,有四个实现接口: onTouchesBegan, onTouchesMoved, onTouchesEnded, onTouchesCancelled
* 目标代理代理事件可以自定义给node, 通过上述 addTargetedDelegate开启, 同样也有四个实现接口:onTouchBegan... (注意此处没有es, 而且began函数需要返回true or false, false的话,后续moved, ended等将不会生效);
* 一个触摸事件被接受后,从优先级高的开始逐个触发, 遇到swallows, 则停止;
但是在cocos2d-x js binding中没有实现addTargetDelegate的绑定, demo中都不能使用, 即使是最新的2.1.4版本也没有,遇到了些问题,让这个绑定一直延迟发布,有兴趣可以看这里:https://groups.google.com/forum/#!msg/cocos2d-js-devel/pKycy8iI1n4/Cn8KI5Or_PgJ
在jsb中有个替代的实现:cc.registerTargettedDelegate(priority, swallowsTouches, this);
虽然和cocos2d-html5的接口不同,但是可以先使用, 具体使用如下:
为遮罩层之上的菜单添加最高优先级, 为遮罩层设置目标触摸事件的代理, 实现onTouchBegan的接口,注意这里需要返回true, 否则 swallowsTouches不会生效;
var menuGroup = cc.Menu.create(btn1, btn2);
menuGroup.setTouchPriority(cc.MENU_HANDLER_PRIORITY-2);
cc.registerTargettedDelegate(cc.MENU_HANDLER_PRIORITY-1, true, confirmLayer);
confirmLayer.onTouchBegan = function(){cc.log("touches confirm layer! block touchEvent bubble!");return true;};
最后,在结束该窗体后,记得调用:
cc.unregisterTouchDelegate(confirmLayer);
=================================
备注:对于cocosbuilder上创建的layer, 使用registerTargettedDelegate会遇到控制问题,暂时先使用脚本创建;
Good Luck !
- cocos2d-x jsb 防止触摸事件传递
- cocos2d-x js binding 防止触摸事件传递 - sslin
- cocos2d 触摸事件的传递
- JSB Cocos2d-x Javascript
- cocos2d-x触摸事件优先级
- cocos2d-x 精灵触摸事件
- cocos2d-x触摸事件优先级
- Cocos2d-x中触摸事件
- QUICK COCOS2D-X 触摸事件
- Cocos2d-x屏幕触摸事件
- cocos2d-x lua 触摸事件
- cocos2d.x单点触摸事件
- Cocos2d-X之触摸事件
- Cocos2d-x Lua 触摸事件
- cocos2d-x 3.13 触摸事件
- cocos2d-x 3.x之触摸事件
- cocos2d-x js binding tips 1 使用cocosbuilder导入jsb后无法响应触摸的问题
- 在cocos2d-x jsb/html5中设置触摸代理的方法
- 对于retain和assign属性的理解
- PostgreSQL 序列(SEQUENCE)
- 【安卓笔记】touch事件的分发和消费机制
- NYOJ45 棋盘覆盖
- android 内存溢出(oom)产生原因和内存优化
- cocos2d-x jsb 防止触摸事件传递
- 动态添加标题和Viewpager,标题和ViewPager联动滑动
- lucene4.1 小例子 全文检索
- php 做图像报表
- 【JavaScript】encodeURI() 函数
- Hadoop2.2.0已经遗弃的属性名称
- iOS基础面试题(四)
- android 截屏功能分析
- delegate申请属性的时候为什么用assign而不是retain