Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(点击移动测试)

本文介绍Cocos2d-x 3.2 Lua版本中的点击移动功能实现,通过示例代码展示了如何创建单点触摸事件及注册监听回调方法。包括精灵的移动、旋转等交互操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://blog.youkuaiyun.com/wwj_748/article/details/38374723

本篇博客介绍Cocos2d-x 3.2Lua示例中点击移动的例子,在这个例子你可以得到如何创建单点触摸的事件和注册事件监听回调方法。




示例代码:
[javascript]  view plain  copy
  1. --[[  
  2. ClickAndMoveTest.lua  
  3. 点击与移动  
  4. ]]--  
  5.   
  6. -- 获取屏幕尺寸  
  7. local size = cc.Director:getInstance():getWinSize()  
  8. local layer = nil -- 层  
  9. local kTagSprite = 1 --精灵标记  
  10.   
  11. local function initWithLayer()  
  12.     local sprite = cc.Sprite:create(s_pPathGrossini)  
  13.   
  14.   
  15.     -- 添加颜色层,黄色  
  16.     local bgLayer = cc.LayerColor:create(cc.c4b(255,255,0,255))  
  17.     layer:addChild(bgLayer, -1)  
  18.       
  19.     -- 添加  
  20.     layer:addChild(sprite, 0, kTagSprite)  
  21.     -- 设置精灵位置到(20,150)  
  22.     sprite:setPosition(cc.p(20,150))  
  23.     -- 执行跳的动作,第一个参数为持续时间,第二个参数为位置,第三个参数为跳的高度,第四个参数跳的次数    
  24.     sprite:runAction(cc.JumpTo:create(4, cc.p(300,48), 100, 4))  
  25.   
  26.     -- 背景层执行无限重复的动作序列,先淡进,再淡出  
  27.     bgLayer:runAction(cc.RepeatForever:create(cc.Sequence:create(  
  28.                                                  cc.FadeIn:create(1),  
  29.                                                  cc.FadeOut:create(1))))  
  30.   
  31.     -- 触摸开始  
  32.     local function onTouchBegan(touch, event)  
  33.         return true  
  34.     end  
  35.   
  36.     -- 触摸结束  
  37.     local function onTouchEnded(touch, event)  
  38.         -- 获取点击位置  
  39.         local location = touch:getLocation()  
  40.           
  41.         -- 根据标记获取子节点  
  42.         local s = layer:getChildByTag(kTagSprite)  
  43.         s:stopAllActions()-- 停止所有动作  
  44.         -- 执行移动动作,移动到点击的位置  
  45.         s:runAction(cc.MoveTo:create(1, cc.p(location.x, location.y)))  
  46.         local posX, posY = s:getPosition() -- 获取精灵的位置  
  47.         local o = location.x - posX -- X轴的距离  
  48.         local a = location.y - posY -- Y轴的距离  
  49.         local at = math.atan(o / a) / math.pi * 180.0 --求角度 ,反正切函数求弧度/π*180.0  
  50.         --1弧度= 180/π, 1度=π/180  
  51.   
  52.         -- 点击位置在下边  
  53.         if a < 0 then  
  54.             -- 点击位置在左边  
  55.             if o < 0 then  
  56.                 at = 180 + math.abs(at)  
  57.             else  
  58.             -- 点击位置在右边  
  59.                 at = 180 - math.abs(at)  
  60.             end  
  61.         end  
  62.         -- 执行旋转的动作  
  63.         s:runAction(cc.RotateTo:create(1, at))  
  64.     end  
  65.   
  66.   
  67.     -- 单点触摸的监听器  
  68.     local listener = cc.EventListenerTouchOneByOne:create()  
  69.     -- 注册两个回调监听方法  
  70.     listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )  
  71.     listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )  
  72.     local eventDispatcher = layer:getEventDispatcher()-- 时间派发器  
  73.     -- 绑定触摸事件到层当中  
  74.     eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)  
  75.   
  76.     return layer  
  77. end  
  78.   
  79. --------------------------------  
  80. -- Click And Move Test  
  81. --------------------------------  
  82. function ClickAndMoveTest()  
  83.     cclog("ClickAndMoveTest")  
  84.     local scene = cc.Scene:create()  
  85.     layer = cc.Layer:create()  
  86.   
  87.     initWithLayer()  
  88.     scene:addChild(layer)  
  89.     scene:addChild(CreateBackMenuItem())  
  90.       
  91.   
  92.     return scene  
  93. end  


Cocos2d-x有两种触摸事件,一种是单点触摸,一种是多点触摸,本篇博客例子使用的单点触摸事件。
EventListenerTouchOneByOne类
[cpp]  view plain  copy
  1. -- 单点触摸的监听器  
  2.     local listener = cc.EventListenerTouchOneByOne:create()  
  3.     -- 注册两个回调监听方法  
  4.     listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )  
  5.     listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )  
  6.     local eventDispatcher = layer:getEventDispatcher()-- 时间派发器  
  7.     -- 绑定触摸事件到层当中  
  8.     eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)  

最后的一个方法绑定节点到监听器中去,触摸优先级越低的越先被触摸。相同优先级的,后添加的先被触。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值