版本:cocos2d-x 2.2.2 语言:Lua
大清早的起来感觉还是有点热。嗯,直接进入正题吧。
之前也说过在lua版本中使用registerScriptTapHandler有一个明显的缺点,今天我公布一下答案,就是只要按下去就会触发事件,并不是我们普通理解的放开按钮再触发。
我们来回顾一下注册的代码:
在一个MenuItem上使用了该方法,然后如果点击了该菜单(或者按钮),就会触发callbackbt方法,tag是传递节点的setTag传入的值,所以menu_item注意一定要setTag一下,然后再由tag来判断触发了哪一个按钮。
如果你的游戏里只有一个按钮的话,当我没说。
pSender的话就是触碰的实例,当然直接self也就是该实例。
(昨天忘记传代码了,也是醉了,整天不知道在想些什么。传完回来了,继续)
虽然这样也可以用,但是一想到它按下去就直接触发了,我就浑身不自在。放开之后再触发的项目中也用很多,它们是怎么实现的呢?让我去找一下:
以上是lambda表达式一般的注册,这是我自己写的。使用的是registerScriptTouchHandler方法来注册。能够打印出来坐标,也能通过touchType来判断对应的touch事件:
这样再通过convertToNodeSpace转换成节点坐标,判断一下坐标是否在按钮内,就可以决定是否触发相应的事件了。
不过上述代码可能有点疑惑。传入的参数应该用注释的pring(x, y)来打印啊,我网上查了也是这种方法,项目中的代码也是这么写的,怎么到了这里传入的就是个table了呢?具体我也不是很了解,只能说如果大家遇到这个问题两种方法都试试。等我找到具体的原因后再和大家说说。
下一节是2.0 C++版本的触碰事件,3.0 Lua和C++差不多,很多教程最基础也讲了很多,我就不多说了。然后是触碰参数的传递,如果找到的话,就搞个特别篇吧,哈哈。
总结:
2.0Lua版本中两种注册触碰事件:registerScriptTouchHandler、registerScriptTapHandler