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

来源:互联网 发布:海岛奇兵13本升级数据 编辑:程序博客网 时间:2024/05/01 06:18

版本:cocos2d-x 2.2.2    语言:C++

 

快要到周末了,这边还有个漫展,有点想去,但周末还是在家打打游戏比较舒服就算了。

 

昨天加班到近10点半那,现在感觉好累。然后第一节的遗留问题的讲解是会有的,我大概知道思路了,下个星期一分享给大家哦。

 

这次我要讲的是2.0版本中的触碰事件,其实2.0和3.0都差不多,只不过3.0可以使用lambda表达式直接传函数进去。

 

直接来看看我们的CCLayer中的方法吧:

 

不管是单点触碰还是多点触碰也都是有的。继承CCLayer,重写一些这些方法,再setTouchEnable(true)就可以使用了。

 

或者就是这么玩:

 

有点像3.0的处理吧,但是3.0中传入的是listener,也就是说把事件源和监听的listener给分开了。(当年2.0的代码确实不太规范的感觉啊)

 

嗯,这时候大家是不是很好奇setTouchEnable这个方法,它究竟做了什么,直接去看源代码:

 

看到这边我们恍然大悟,不过还是要继续追踪下去:

 

这厮的效果就是我们获取事件分发器,然后注册啊,我潜意识中一直以为只把其中的一个变量改变了。这样就OK了。

 

今天就到这里。。。结束了?不,没有,这里我还想讲一下Menu中怎么处理其子类项的,创建的时候大家都应该传了一个函数进去吧。

 

在我这边的项目中,直接调用个方法传递名称、坐标、tag就会给我们创建一个Menu出来,而且他的Touch事件都会在callbackBt中处理,有点神奇,反正只要调用方法就行了,也不用设置什么。

 

然后进入该方法的处理,我们就一目了然了:

 

这边帮忙把callbackBt给绑定了一下,然后继续追踪:

 


这边就进入的cocos的CCMenuItem类了。用sel传入了对应的处理函数。一路追下去,发现了一个奇怪的东西:

 

初始化的时候,他把处理函数放到了一个成员变量m_bSelected。什么鬼,按照我们的想法不是直接用事件分发器注册一下吗?

 

我直接在callbackBt中断了个点,往上看:

 

这边调用了处理函数,继续:

 

看到这边,想必大家都懂了吧,一样的。TouchEnded的时候调用保存在里面的函数,并将本MenuItem传递进去。有点意思吧。

 

另外说一句,在3.0版本中MenuItem的处理方式也是一样的。哦,对了,Lua中也是可以使用这种方法的,上一节中只是使用了另一种方法。具体2.0和3.0触碰事件的区别,请看总结。

 

总结:

今天要求简洁:2.0事件源和监听接口没分开,3.0分开了。

0 0