Cocos2d-x的学习 触碰事件老版本和新版本的对比 第四节
来源:互联网 发布:java网络高级编程 编辑:程序博客网 时间:2024/05/01 11:24
版本:cocos2d-x 2.2.2 语言:C++
最近又要高温了,房间里没空调,不开心。
今天主要讲一下使用Lua注册事件的时候,究竟在什么地方设置了两个参数。
首先我要说一下,setTouchEnable之类的方式开启事件处理一般是用在C++中的,而Lua中的两种方法:registerScriptTouchHandler、registerScriptTapHandler,在C++中是无法使用的(高版本C++,listener就够了)。
所以专门针对的就是上述两个方法的注册。首先来看看这个:
这是CCLayer中的触摸事件处理。总之下面一堆就是要求你重写这个方法的,重点是上面四行的代码,excuteScriptTouchHandler,执行触摸的脚本handler。追进去看看:
出现了一个脚本引擎,然后该引擎调用了事件,继续看看:
int CCLuaEngine::executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch){ CCTouchScriptHandlerEntry* pScriptHandlerEntry = pLayer->getScriptTouchHandlerEntry(); if (!pScriptHandlerEntry) return 0; int nHandler = pScriptHandlerEntry->getHandler(); if (!nHandler) return 0; switch (eventType) //存放了Touch类型 { case CCTOUCHBEGAN: m_stack->pushString("began"); break; case CCTOUCHMOVED: m_stack->pushString("moved"); break; case CCTOUCHENDED: m_stack->pushString("ended"); break; case CCTOUCHCANCELLED: m_stack->pushString("cancelled"); break; default: return 0; } const CCPoint pt = CCDirector::sharedDirector()->convertToGL(pTouch->getLocationInView()); m_stack->pushFloat(pt.x); //存放 x、y坐标 m_stack->pushFloat(pt.y); int ret = m_stack->executeFunctionByHandler(nHandler, 3); m_stack->clean(); return ret;}
首先前面获取具体的handler,然后在跟Lua交互的栈中存放了Touch的类型,之后把x、y轴的坐标也传递了进去。最后执行了handler处理。
所以让我们来整理一下:
1. 首先我们开启了CCLayer中的触碰事件;
2. 然后把handler传递了进去;
3. 这时候玩家触碰了屏幕,触发了ccTouchBegan等方法,但Lua中没有重写这些方法,一判断有脚本的,就马上交给了CCLuaEngine脚本引擎处理;
4. 引擎主动传入了触碰类型、坐标这几个参数,最后执行了注册的handler
上述代码是TouchScript的,想必TapScript也大同小异:
搜了一下,这边传入了具体的tag和原本的Object。嗯,这样就解决了。什么?感觉有点怪怪的?
嗯,可能是这点吧。实际上仔细看看上面的代码,TapScript是属于MenuItem的,而TouchScript是属于CCLayer的。
断了个点,追上去:
想必这边也解释了,为什么按下就触碰的原理了。。。而active,主动传入的事件是在TouchEnded中处理的,为什么要这样啊。。。
3.0版本的处理方式跟2.0是一样的。
- Cocos2d-x的学习 触碰事件老版本和新版本的对比 第四节
- Cocos2d-x的学习 触碰事件老版本和新版本的对比 第二节
- Cocos2d-x的学习 触碰事件老版本和新版本的对比 第一节
- Cocos2d-x的学习 触碰事件老版本和新版本的对比 第三节
- AFN老版本和新版本的分别使用
- cocos2d-x的触碰事件
- cocos2d-x的多点触碰事件
- 【cocos2D-x学习】15.cocos2d-x 2.0 版本的 ShatteredSprite
- onvif新版本发现不了老版本onvif的ipc问题
- 【objc】基础结构objc_class的布局,老版本vs新版本
- 老版本向新版本u3d转换的几个问题
- 关于vs老版本转换新版本的一些问题
- Cocos2d-x setContentSize后一个奇怪的现象,老版本的失误
- Box2D和Chipmunk的对比 Cocos2d-x物理引擎
- cocos2d-x常用 及新版本的一些变化
- Cocos2d-x 可响应触碰事件的 CCSprite
- Cocos2d-x新手学习之TestCpp项目结构分析(第四篇)[版本:cocos2d-x-3.1.1]
- cocos2d之触屏事件处理机制(2.x和3.x的变化)
- iOS判断 英文 数字 汉字等
- HDU 2710 Max Factor
- 知乎上遇到的对AOP的理解
- 转一篇心灵鸡汤,在贴吧上看的,作者不详
- 【HDU 2544 最短路】
- Cocos2d-x的学习 触碰事件老版本和新版本的对比 第四节
- 【HDU 5283】【JZOJ 4694】 火神的鱼
- 顺序栈和链式栈的理解与使用
- 【转】脉络清晰的BP神经网络讲解
- Java基础增强---枚举
- iOS 数据存储:Plist
- 链式存储结构即链式结构简单介绍
- BZOJ2160 拉拉队排练
- continue与break的区别