Cocos2d-x的学习 触碰事件老版本和新版本的对比 第一节

版本: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++中触碰事件的处理

 

以后几天会处理以上的问题。策划改需求了得赶紧去做了。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值