• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Cocos2d-x 3.1.1 Lua示例 ActionManagerTest(动作管理)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

https://blog.csdn.net/wwj_748/article/details/37595501


本篇博客介绍Cocos2d-x的动作管理例子,这个例子展示了Cocos2d-x的几个动作:
MoveTo——移动动作,移动到某一个点
MoveBy——移动动作,与MoveTo是类似的,只是MoveBy可以移动到某一个点然后按原路返回,提供reverse方法。
RotateTo——旋转动作,把某一精灵旋转到某一角度
RotateBy——旋转动作,把某一精灵旋转某个角度,它有一个方法reverse,它让对象按原路径旋转回
ScaleTo——缩放动作,把某一精灵(Sprite)放大或缩小到某一比例
Scaleby——缩放动作,把某一精灵(Sprite)放大或缩小多少比例,它有一个方法reverse,它让对象按原路径旋转回


这个例子涉及到的知识点有:
  • 创建动作序列,例如: cc.Sequence:create(cc.DelayTime:create(1.4),cc.CallFunc:create(removeThis)
  • 执行动作序列,例如:ret:runAction( cc.Sequence:create(cc.DelayTime:create(1.4),cc.CallFunc:create(removeThis)))

我们先来看一下这个例子的效果,特别制作动态图给大家展示:







具体代码实现,具体API的使用方法,希望各位能认真看,如果对其中所传参数不清楚和不理解的,可以请教百度老师或者到官网参考具体API,这是学习方法。
》》》ActionManagerTest.lua

[javascript] view plain copy
  1. local    kTagNode = 0   -- 结点标识  
  2. local    kTagGrossini = 1 --   
  3. local    kTagSequence = 2 --   
  4. -- 获取和这个 director 关联的调度器  
  5. local   scheduler = cc.Director:getInstance():getScheduler()  
  6. --------------------------------------------------------------------  
  7. --  
  8. -- Test1  
  9. --  
  10. --------------------------------------------------------------------  
  11.   
  12. local function CrashTest()  
  13.     -- 创建测试层  
  14.     local ret = createTestLayer("Test 1. Should not crash")  
  15.     -- 精灵,s_pPathGrossini为图片路径  
  16.     local  child = cc.Sprite:create(s_pPathGrossini)  
  17.     -- 显示到x=200,y=200的位置  
  18.     child:setPosition( 200,200 )  
  19.     ret:addChild(child, 1)  
  20.   
  21.     --Sum of all action's duration is 1.5 second.  
  22.     -- 旋转一个节点,1.5秒,旋转90度  
  23.     child:runAction(cc.RotateBy:create(1.5, 90))  
  24.     -- 执行动作序列,1.4秒延迟,淡出  
  25.     child:runAction(cc.Sequence:create(cc.DelayTime:create(1.4),cc.FadeOut:create(1.1)))  
  26.       
  27.     local function removeThis()  
  28.         -- 溢出孩子  
  29.         ret:getParent():removeChild(ret, true)  
  30.         Helper.nextAction()  
  31.     end  
  32.   
  33.     --After 1.5 second, self will be removed.  
  34.     -- 1.5秒之后,自身会被移除  
  35.     ret:runAction( cc.Sequence:create(cc.DelayTime:create(1.4),cc.CallFunc:create(removeThis)))  
  36.     return ret  
  37. end  
  38.   
  39.   
  40. --------------------------------------------------------------------  
  41. --  
  42. -- LogicTest  
  43. -- 逻辑测试  
  44. --------------------------------------------------------------------  
  45. local function LogicTest()  
  46.     local ret = createTestLayer("Logic test")  
  47.     -- 精灵,s_pPathGrossini为图片路径  
  48.     local  grossini = cc.Sprite:create(s_pPathGrossini)  
  49.     -- 添加一个子节点到容器中,有Z轴顺序和一个标记。  
  50.     ret:addChild(grossini, 0, 2)  
  51.     grossini:setPosition(200,200)  
  52.     local function bugMe(node)  
  53.         -- 停止所有动作  
  54.         node:stopAllActions() --After this stop next action not working, if remove this stop everything is working  
  55.         node:runAction(cc.ScaleTo:create(2, 2))  
  56.     end  
  57.     -- 运行动作序列  
  58.     grossini:runAction( cc.Sequence:create(cc.MoveBy:create(1, cc.p(150,0)) ,cc.CallFunc:create(bugMe)))  
  59.     return ret  
  60. end  
  61.   
  62. --------------------------------------------------------------------  
  63. --  
  64. -- PauseTest  
  65. -- 暂停测试  
  66. --------------------------------------------------------------------  
  67.   
  68. local function PauseTest()  
  69.     local ret = createTestLayer("Pause Test")  
  70.     local schedulerEntry = nil  
  71.     local function unpause(dt)  
  72.         scheduler:unscheduleScriptEntry(schedulerEntry)  
  73.         schedulerEntry = nil  
  74.         local  node = ret:getChildByTag( kTagGrossini )  
  75.         local  pDirector = cc.Director:getInstance()  
  76.         pDirector:getActionManager():resumeTarget(node)  
  77.     end  
  78.   
  79.     local function onNodeEvent(event)  
  80.         -- 进入时  
  81.         if event == "enter" then  
  82.             local  s = cc.Director:getInstance():getWinSize()  
  83.             local  l = cc.Label:createWithTTF("After 3 seconds grossini should move""fonts/Thonburi.ttf", 16)  
  84.             ret:addChild(l)  
  85.             l:setAnchorPoint(cc.p(0.5, 0.5))  
  86.             l:setPosition( cc.p(s.width / 2, 245) )  
  87.               
  88.             local  grossini = cc.Sprite:create(s_pPathGrossini)  
  89.             ret:addChild(grossini, 0, kTagGrossini)  
  90.             grossini:setPosition(cc.p(200,200))  
  91.               
  92.             -- 创建移动动作,持续时间1秒,移动到(150,0)的位置  
  93.             local  action = cc.MoveBy:create(1, cc.p(150,0))  
  94.   
  95.             local  pDirector = cc.Director:getInstance()  
  96.             -- 通过获取director关联的ActionManager并为目标添加动作  
  97.             -- 为一个目标添加动作。 如果目标已经存在,动作将被加在已经存在的目标上。  
  98.             -- 如果目标不存在,将会创建这个目标的新对象,这个动作将被添加在这个新创建出来的对象上 当目标动作被暂停,动作队列的顺序也不会乱。  
  99.             pDirector:getActionManager():addAction(action, grossini, true)  
  100.   
  101.             schedulerEntry = scheduler:scheduleScriptFunc(unpause, 3.0, false)  
  102.         -- 退出  
  103.         elseif event == "exit" then  
  104.             if schedulerEntry ~= nil then  
  105.                 scheduler:unscheduleScriptEntry(schedulerEntry)  
  106.             end  
  107.         end  
  108.     end  
  109.     -- 注册响应事件  
  110.     ret:registerScriptHandler(onNodeEvent)  
  111.     return ret  
  112. end  
  113.   
  114. --------------------------------------------------------------------  
  115. --  
  116. -- RemoveTest  
  117. --   
  118. --------------------------------------------------------------------  
  119. local function RemoveTest()  
  120.     local ret = createTestLayer("Remove Test")  
  121.     local  l = cc.Label:createWithTTF("Should not crash""fonts/Thonburi.ttf", 16)  
  122.     -- 获得屏幕大小  
  123.     local  s = cc.Director:getInstance():getWinSize()  
  124.     ret:addChild(l)  
  125.     l:setAnchorPoint(cc.p(0.5, 0.5))  
  126.     l:setPosition( cc.p(s.width / 2, 245))  
  127.   
  128.     -- 创建移动动作,持续2秒,到(200,0)的位置  
  129.     local  pMove = cc.MoveBy:create(2, cc.p(200, 0))  
  130.     -- 停止动作  
  131.     local function stopAction()  
  132.         -- 根据Tag来获取子节点  
  133.         local  pSprite = ret:getChildByTag(kTagGros

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ubuntu/wireshark -Lua: Error during loading: [string \"/usr/share/wireshark ...发布时间:2022-07-22
下一篇:
1.whatisLua?发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap