关于js-binding中Layer触摸事件的优化
2015-09-24 14:06
471 查看
关于js-binding中Layer触摸事件的优化
cocos2d-x 3.71. 目前js中监听触摸事件带来的不便(特别是cocosbuilder)
在目前的js-binding中,如果要监听layer的触摸事件,需要自己监听touch事件,如:var touchLayer = cc.Layer.creat(); cc.eventManager.addListener({ event: cc.EventListener.TOUCH_ONE_BY_ONE, onTouchBegan: function(event){ cc.log("touch begin"); return true; }, onTouchMoved: function(event){ cc.log("touch move"); } }, touchLayer);
而不是像lua-binding一样,在c++层收到触摸消息(touchbegan/touchmove…)后,调用lua事先注册的触摸相应接口:
bool Layer::onTouchBegan(Touch *touch, Event *event) { #if CC_ENABLE_SCRIPT_BINDING if (kScriptTypeLua == _scriptType) //只有lua-binding { return executeScriptTouchHandler(EventTouch::EventCode::BEGAN, touch, event) == 0 ? false : true; } #endif CC_UNUSED_PARAM(event); CCASSERT(false, "Layer#ccTouchBegan override me"); return true; }
带来的不便:
1. js中每个需要响应触摸的地方,都要监听消息,移除消息,很麻烦
2. cocosbuilder编辑的layer就算开启了touch enable也无效(还是需要添加监听代码)
为什么不和lua-binding风格一样呢,那么cocosbuilder编辑的touchlayer就可以这么响应触摸了:
touchLayer.onTouchBegan = function(touch) { return true; }; touchLayer.onTouchMoved = function(touch) {};
So simple
手动创建的layer就可以这么写了
var touchLayer = cc.Layer.create();
//目前以下3个接口,均未绑定在js中
touchLayer.setsetTouchMode(1);
touchLayer.setSwallowsTouches(true);
touchLayer.setTouchEnabled(true);
touchLayer.onTouchBegan = function(touch) { return true; }; touchLayer.onTouchMoved = function(touch) {};
如此一来就不用每次再去添加事件,移除事件了。
2. 实现方法
1.允许layer的触摸事件发生时,c++回调js注册的触摸响应接口:
把layer中,所有if (kScriptTypeLua == _scriptType)的地方改为
if (kScriptTypeNone != _scriptType),这样c++层在收到触摸消息后,就会回调js注册的接口了。(更改这一步,对于cocosbuilder编辑的layer足够了,那么用代码创建的layer需要做第二步)
2.将setsetTouchMode/setSwallowsTouches/setTouchEnabled
三个接口绑定到js中(去掉它们的CC_DEPRECATED_ATTRIBUTE,然后重新运行一下自动绑定脚本即可)。
3.ScriptingCore中有一个触摸响应判断的bug,将在下一篇文章中指出。
相关文章推荐
- JS原型与原型链终极详解(转)
- ExtJS学习--窗口,windows组件
- JSTL之函数标签库fn
- ExtJS学习--Hello world
- checkbox全选功能javascript实现
- js中不同的height, top的区别对比
- js获取省市
- js 模块化编程
- JS中字符串的链接
- Ember.js 入门指南——路由定义
- js for循环的陷阱
- javascript学习笔记1-document.write
- JS列
- js数组,在遍历中删除元素
- JS 去掉最后字符、定时监测
- JS获取鼠标事件
- JSP使用MVC模式完成删除和修改功能实例详解
- Javascript网页截屏的方法
- JS中如何判断null
- js获取select标签选中的值