Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(点击移动测试)
--[[ ClickAndMoveTest.lua 点击与移动 ]]-- -- 获取屏幕尺寸 local size = cc.Director:getInstance():getWinSize() local layer = nil -- 层 local kTagSprite = 1 --精灵标记 local function initWithLayer() local sprite = cc.Sprite:create(s_pPathGrossini) -- 添加颜色层,黄色 local bgLayer = cc.LayerColor:create(cc.c4b(255,255,0,255)) layer:addChild(bgLayer, -1) -- 添加 layer:addChild(sprite, 0, kTagSprite) -- 设置精灵位置到(20,150) sprite:setPosition(cc.p(20,150)) -- 执行跳的动作,第一个参数为持续时间,第二个参数为位置,第三个参数为跳的高度,第四个参数跳的次数 sprite:runAction(cc.JumpTo:create(4, cc.p(300,48), 100, 4)) -- 背景层执行无限重复的动作序列,先淡进,再淡出 bgLayer:runAction(cc.RepeatForever:create(cc.Sequence:create( cc.FadeIn:create(1), cc.FadeOut:create(1)))) -- 触摸开始 local function onTouchBegan(touch, event) return true end -- 触摸结束 local function onTouchEnded(touch, event) -- 获取点击位置 local location = touch:getLocation() -- 根据标记获取子节点 local s = layer:getChildByTag(kTagSprite) s:stopAllActions()-- 停止所有动作 -- 执行移动动作,移动到点击的位置 s:runAction(cc.MoveTo:create(1, cc.p(location.x, location.y))) local posX, posY = s:getPosition() -- 获取精灵的位置 local o = location.x - posX -- X轴的距离 local a = location.y - posY -- Y轴的距离 local at = math.atan(o / a) / math.pi * 180.0 --求角度 ,反正切函数求弧度/π*180.0 --1弧度= 180/π, 1度=π/180 -- 点击位置在下边 if a < 0 then -- 点击位置在左边 if o < 0 then at = 180 + math.abs(at) else -- 点击位置在右边 at = 180 - math.abs(at) end end -- 执行旋转的动作 s:runAction(cc.RotateTo:create(1, at)) end -- 单点触摸的监听器 local listener = cc.EventListenerTouchOneByOne:create() -- 注册两个回调监听方法 listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN ) listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED ) local eventDispatcher = layer:getEventDispatcher()-- 时间派发器 -- 绑定触摸事件到层当中 eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer) return layer end -------------------------------- -- Click And Move Test -------------------------------- function ClickAndMoveTest() cclog("ClickAndMoveTest") local scene = cc.Scene:create() layer = cc.Layer:create() initWithLayer() scene:addChild(layer) scene:addChild(CreateBackMenuItem()) return scene end
-- 单点触摸的监听器 local listener = cc.EventListenerTouchOneByOne:create() -- 注册两个回调监听方法 listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN ) listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED ) local eventDispatcher = layer:getEventDispatcher()-- 时间派发器 -- 绑定触摸事件到层当中 eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)
最后的一个方法绑定节点到监听器中去,触摸优先级越低的越先被触摸。相同优先级的,后添加的先被触。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。