版本:cocos2d-x 2.2.2/3.10 语言:C++/Lua
今天把主程大大派发下来的任务完成了,稍微偷会懒写写博客,哈哈。
事件派发机制,我在自学的时候一直使用的是先搞个listener,再在里面onTouchBegan等于一个lambda表达式写具体的处理,最后添加监听就完毕了。可是回到2.0的版本就懵逼了,我的listener呢,被吃了吗?
首先说一下,3.0相关的处理还有一种方法,就是继承Layer类,然后在里面写virtual onTouchBegan等方法,最后使用setTouchEnabled就OK了。
然后我就去看源代码了,我想着引擎的处理应该更加正规吧,结果是:
you are welcome. 我知道了不用lambda表达式怎么写了。才怪!这不就是创建listener的方法嘛。
然后我们来看看主程大大在2.0 Lua版本是如何处理的:
创建一个MenuItem,在这个上面registerScriptTapHandler注册了一个callback事件,然后触发的时候,会传递tag和当前的对象过来,使用getParent就可以获取到当前的Layer了。
其中pSender是由handler中的menu_item传递过来的。那这个tag是从哪里来的?首先我查看了hanlder:
网上查了一下大概懂了其中的意思,method(obj, …)就是以obj作为对象去调用method方法。也就是说方法内部的self变成了传入的obj。
直接改造一下,没有任何问题:
往上查看调用堆栈,看到了这个函数,基本推测是由m_state传递进参数的。
今天先到这里,触碰事件我是边研究边写的,一天感觉搞不定,就花个几天来分析一下这个东西。
剩下的问题是具体参数是如何传递的(实在找不到就算了)、registerScriptTapHandler的缺点,2.0更好的触碰事件,2.0 C++中触碰事件的处理
以后几天会处理以上的问题。策划改需求了得赶紧去做了。。。