cocos2d-x + lua 处理触屏事件
来源:互联网 发布:吉林大学网络教育学费 编辑:程序博客网 时间:2024/05/16 18:33
(1) 使用方法如下
local function onTouchBegan(x, y)endlocal function onTouchMoved(x, y)endlocal function onTouchEnded(x, y)endlocal function onTouch(eventType, x, y) if eventType == "begin" then return onTouchBegan(x, y) elseif eventType == "moved" CCTOUCHMOVED then return onTouchMoved(x, y) else return onTouchEnded(x, y) endend--注册触摸函数layer:registerScriptTouchHandler(onTouch)--设置成可触摸layer:setIsTouchEnabled(true)
(2)原理如下
一,其实就是在touch事件派发到layer的时候执行一个lua的函数。
这个函数也就是
local function onTouch(eventType, x, y)
if eventType == "begin" then
return onTouchBegan(x, y)
elseif eventType == "moved" CCTOUCHMOVED then
return onTouchMoved(x, y)
else
return onTouchEnded(x, y)
end
end
二,在cclayer中注册此函数
layer:registerScriptTouchHandler(onTouch)
void CCLayer::registerScriptTouchHandler(int nHandler, bool bIsMultiTouches, int nPriority, bool bSwallowsTouches){ unregisterScriptTouchHandler(); //将函数名注册到CCTouchScriptHandlerEntry中 m_pScriptTouchHandlerEntry = CCTouchScriptHandlerEntry::create(nHandler, bIsMultiTouches, nPriority, bSwallowsTouches); m_pScriptTouchHandlerEntry->retain();}
三,当cclayer响应ccTouchBegin时,有如下代码
if (kScriptTypeNone != m_eScriptType)
{ //如果使用了脚本语言,就解析上面注册的ScriptTouchHandler
return excuteScriptTouchHandler(CCTOUCHBEGAN, pTouch) == 0 ? false : true;
}
excuteScriptTouchHandler调用了executeLayerTouchEvent解析lua函数
四,执行lua函数
int CCLuaEngine::executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch){ CCTouchScriptHandlerEntry* pScriptHandlerEntry = pLayer->getScriptTouchHandlerEntry(); if (!pScriptHandlerEntry) return 0; //从CCTouchScriptHandlerEntry取得函数名 int nHandler = pScriptHandlerEntry->getHandler(); if (!nHandler) return 0; switch (eventType) { 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); m_stack->pushFloat(pt.y); //解析函数,传递了3个参数,分别是eventType,x,y int ret = m_stack->executeFunctionByHandler(nHandler, 3); m_stack->clean(); return ret;}这样就完成了触屏事件在lua中的处理
- cocos2d-x + lua 处理触屏事件
- Cocos2D-X事件处理机制之触屏事件
- Cocos2D-X事件处理机制之触屏事件
- cocos2d-x lua 触摸事件
- Cocos2d-x Lua 触摸事件
- cocos2d-x遇到的触屏处理事件问题
- cocos2d-x 触屏事件
- cocos2d-x 触屏事件
- Cocos2d-x Lua 单点触摸 多点触摸 触屏事件(1)
- cocos2d-x + lua中无发获取事件onEnterTransitionDidFinish
- 【cocos2d-x 3.5】Lua触摸事件
- Cocos2d-x 3.9 Lua 自定义事件
- Cocos2d-x Lua实现长按事件
- Cocos2d-x 3.10 Lua 自定义事件
- cocos2d-x-lua 单点触摸事件
- Cocos2d-x Touch事件处理
- Cocos2d-x 处理双击事件
- cocos2d-x 3.0 事件处理
- PERL中的数组和列表
- poj 3626 Mud Puddles (简单BFS)
- Add Two Numbers
- extjs 4.2 日期控件 选择时分秒功能
- iOS之判断滚动视图的滚动方向
- cocos2d-x + lua 处理触屏事件
- PHP入门 -- 命令行参数
- http://blog.csdn.net/fengbingchun/article/details/6793826
- C++ primer(八)--内联函数 引用变量 函数重载/模板/模板具体化
- RMAN 系列(一)
- RMAN 系列(二)
- java怎么判断byte[]的原字符串的编码?
- Matlab的for循环优化
- 动态显示待机LOGO的做法 && 刷LOGO出现的问题