关于在Cocos2dx中注册触摸事件——Lua

关于在Cocos2dx中注册触摸事件,之前一直对此一知半解,这两天在看引擎的源码,趁此机会写下来...

以下纯属个人理解,如有不对欢迎指正。。。

在引擎的CCLayer类中声明了有四个方法:

1 virtual bool onTouchBegan(Touch *touch, Event *unused_event);
2 virtual void onTouchMoved(Touch *touch, Event *unused_event);
3 virtual void onTouchEnded(Touch *touch, Event *unused_event);
4 virtual void onTouchCancelled(Touch *touch, Event *unused_event);

在C++中应该需要重写这四个方法,下面说一下在Lua中 的用法,

 1 local layer = cc.Layer:create()
 2 someScene:addChild(layer)
 3
 4 local sprite = cc.Sprite:create("Images/CyanSquare.png")
 5 sprite:setPosition(cc.p(origin.x + size.width/2 - 80, origin.y + size.height/2 + 80))
 6 layer:addChild(sprite, 10)
 7
 8 --实现事件触发回调
 9 local function onTouchBegan(touch, event)
10         local target = event:getCurrentTarget()
11
12         local locationInNode = target:convertToNodeSpace(touch:getLocation())
13         local s = target:getContentSize()
14         local rect = cc.rect(0, 0, s.width, s.height)
15
16         if cc.rectContainsPoint(rect, locationInNode) then
17             return true
18         end
19             return false
20 end
21 local function onTouchMoved(touch, event)
22 end
23 local function onTouchEnded(touch, event)
24 end
25
26 local listener = cc.EventListenerTouchOneByOne:create() -- 创建一个事件监听器
27 listener:setSwallowTouches(true)
28 listener:registerScriptHandler(onTouchBegan, cc.Handler.EVENT_TOUCH_BEGAN)
29 listener:registerScriptHandler(onTouchMoved, cc.Handler.EVENT_TOUCH_MOVED)
30 listener:registerScriptHandler(onTouchEnded, cc.Handler.EVENT_TOUCH_ENDED)
31
32 local eventDispatcher = self:getEventDispatcher() -- 得到事件派发器
33 eventDispatcher:addEventListenerWithSceneGraphPriority(listener, sprite) -- 将监听器注册到派发器中

单点触摸的事件处理大致就是这样,其他加速器、键盘事件也类似,以后再详细写上来...

时间: 2024-10-11 01:16:33

关于在Cocos2dx中注册触摸事件——Lua的相关文章

cocos2dx中的触摸事件及触摸优先级

1.只有CCLayer及其派生类才有触摸功能. 2.开启触摸 setTouchEnable(true); 3.设置触摸模式,单点,多点(仅IOS支持) setTouchMode(kCCTouchesOneByOne);//单点触摸 4.需要重载(override)的四个触摸事件函数 bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);//点触事件,返回false,表示触摸事件不往下传递了 void ccTouchMoved(CCTouch *p

Lua中添加触摸事件

1首先,lua中的触摸事件与cocos2d中的触摸事件相似,都需要添加监听者,都需要将监听者添加到触摸事件分发器中去 local listener=cc.EventListenerTouchOneByOne:create() listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN ) listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_T

QUICK 中的触摸事件

本文转载于:http://www.cocos2d-x.org/docs/manual/framework/quick/V3/touch-events/zh Cocos2d-x 原本的触摸机制存在一些限制,在使用中需要开发者做不少额外的处理.所以 Quick-Cocos2d-x 提出了自己的一套触摸机制.本文详细介绍了这套新机制的用法. 显示层级 在 Cocos2d-x 里,整个游戏的画面是由一系列的 Scene, Node, Sprite, Layer 等对象构成的.而所有这些对象都是从 Nod

【转载】Quick 中的触摸事件

原文地址 http://cn.cocos2d-x.org/article/index?type=quick_doc&url=/doc/cocos-docs-master/manual/framework/quick/V3/touch-events/zh.md Quick 中的触摸事件 Cocos2d-x 原本的触摸机制存在一些限制,在使用中需要开发者做不少额外的处理.所以 Quick-Cocos2d-x 提出了自己的一套触摸机制.本文详细介绍了这套新机制的用法. 显示层级 在 Cocos2d-x

Android中TouchEvent触摸事件机制

当我们的手指在Android屏幕上点击或滑动时,就会触发触摸事件TouchEvent.在App中ViewGroup和View存在多级嵌套,在最外层的是Activity,最内层的View,介于Activity与View之间的是一些ViewGroup.本文为了简化讨论,我们假设一个Activity中只有一个ViewGroup,这个ViewGroup中只有一个View.当我们用手指触摸到View的UI时,就会产生触摸事件TouchEvent,总的过程如下图所示: 首先是最外层的Activity接收到该

使用BabeLua在cocos2d-x中编辑和调试Lua

使用BabeLua在cocos2d-x中编辑和调试Lua BabeLua是一款基于VS2012/2013的Lua集成开发环境.具有Lua语法高亮.语法检查,自己主动补全.高速搜索,注入宿主程序内对Lua脚本进行调试,设置断点观察变量值.查看堆栈信息等功能. 怎样安装BabeLua 请參考<系列1-BabeLua入门> 设置Cocos2d-x项目 在VS菜单上选择:[lua][Settings]打开设置界面,例如以下图(左上角选中[Lua?Folder]) ? 如上图分别设置: (1)Lua?s

关于Cocos2dx 3.6 触摸事件 中 setSwallowTouches 的疑惑

假设Layer1的ZOrder大于Layer2的ZOder,则 Layer1和Layer2的触摸事件回调函数调用情况如下 Layer1 setSwallow:          false     false      true     true Layer1 touchBegan ret:    false     true     false      true -------------------------------------------------------------- La

UIResponder 类中的触摸事件响应方法

touchesBegan:withEvent:-当触摸事件处于"起步阶段"(starting phase),也就是用户刚开始触碰屏幕时,系统会调用这个方法. touchesMoved:withEvent:-当用户触摸屏幕并持续在屏幕上移动手指时,系统会调用这个方法. touchesEnded:withEvent:-当用户触摸屏幕的一根手指或所有手指都从屏幕上拿开时,触摸过程就结束了,而系统此时会调用这个方法.如果在用户移动手指的过程中程序做了一些处理,那么此时应该会执行相关的清理工作.

iOS开发笔记--iOS中的触摸事件和手势处理

iOS中的事件可以分为三大类:原文:http://my.oschina.net/aofe/blog/268749 1> 触摸事件 2> 加速计事件 3> 远程控制事件 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为"响应者对象". UIApplication,UIViewController,UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件. UIRespon