热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Cocos2dx3.2Lua示例ActionTest(动作测试)

Cocos2d-x3.2Lua示例ActionTest(动作测试)2014年博文大赛,请投上您宝贵的一票:http:vote

Cocos2d-x 3.2 Lua示例 ActionTest(动作测试)


2014年博文大赛,请投上您宝贵的一票:http://vote.blog.csdn.net/Article/Details?articleid=38272837

移动开发狂热者群 299402133,欢迎广大开发者加入

 Cocos2d-x官方真够给力的,3.1.1还没有熟悉完,3.2就出来,本篇博客继续介绍Cocos2d-x的Lua示例,关于3.2的例子变动不是很大,稍微介绍一下3.2的新特性吧:

3.2版本的新特性 

* 新的3D动画节点Animation3D/Animate3D 

* 支持fbx-conv工具生成Sprite3D支持的二进制格式

* 支持游戏手柄 

* 支持快速瓦片地图 

* 加入utils::cpatureScreen方法用于截屏 

* Physics body支持缩放和旋转 

* 加入Node::enumerateChildren 和 utils::findChildren方法,且支持C++ 11的正则表达式

* 加入Node::setNormalizedPosition方法, Node的位置像素会根据它的服节点的尺寸大小计算


想了解更多详细的内容,可以这个链接:http://cn.cocos2d-x.org/tutorial/show?id=1180


本篇博客继续介绍Lua的一个实例,这个实例基本上涵盖了Cocos2d-x的所有基本动作,在这个例子中Cocos2d-x Lua开发者可以了解到如何来使用这些动作。


小巫这里根据官网文档类给大家解析一遍,也顺便加深自己的印象:

注:笔者不把一大段代码贴出来,分段解释比较舒服一点

MoveBy:通过修改节点对象的位置属性来改变节点对象的x,y像素。 x,y的坐标是相对于这个对象的位置来说的。 几个MoveBy动作可以同时被调用,最终的运动是这几个单独运动的综合

MoveTo:移动节点对象到位置x,y。x,y是绝对坐标,通过修改它的位置属性来改变它们的值。 几个MoveTo动作可以被同时调用,并且最终的运动是几个单独运动的综合。

  

  •     -- 用图片名称加一个精灵帧到动画中  
  •     animation:addSpriteFrameWithFile(name)  
  •   end  
  •   -- should last 2.8 seconds. And there are 14 frames.  
  •   -- 在2.8秒内持续14帧  
  •   animation:setDelayPerUnit(2.8 / 14.0)  
  •   -- 设置"当动画结束时,是否要存储这些原始帧"true为存储  
  •   animation:setRestoreOriginalFrame(true)  
  •   
  •   -- 创建序列帧动画  
  •   local action = cc.Animate:create(animation)  
  •   grossini:runAction(cc.Sequence:create(action, action:reverse()))  
  •   
  •   -- 动画缓存单例类。 如何你想要保存动画,你需要使用这个缓存。  
  •   local cache = cc.AnimationCache:getInstance()  
  •   -- 添加入一个动画到缓存,并以name作为标示  
  •   cache:addAnimations("animations/animations-2.plist")  
  •   -- Returns 查找并返回名了name的动画。 如果找不到,返回NULL.  
  •   local animation2 = cache:getAnimation("dance_1")  
  •   
  •   -- 创建第二个序列帧动画  
  •   local action2 = cc.Animate:create(animation2)  
  •   -- 执行动作序列  
  •   tamara:runAction(cc.Sequence:create(action2, action2:reverse()))  
  •   
  •   -- 克隆一个动画  
  •   local animation3 = animation2:clone()  
  •     
  •   -- 设置循环次数  
  •   animation3:setLoops(4)  
  •   
  •   -- 创建一个序列帧动画  
  •   local action3 = cc.Animate:create(animation3)  
  •   -- 执行动作  
  •   kathia:runAction(action3)  
  •   
  •   Helper.titleLabel:setString("Animation")  
  •   Helper.subtitleLabel:setString("Center: Manual animation. Border: using file format animation")  
  •   
  •   return layer  
  • end  


  • Sequence类:顺序执行动作



    [Javascript] view plain copy
    1. --------------------------------------  
    2. -- ActionSequence  
    3. -- 动作序列  
    4. --------------------------------------  
    5. local function ActionSequence()  
    6.   -- 创建层  
    7.   local layer = cc.Layer:create()  
    8.   initWithLayer(layer)  
    9.   
    10.   alignSpritesLeft(1)  
    11.   
    12.   -- 创建动作序列,第一个动作是MoveBy,第二个动作是RotateBy  
    13.   local action = cc.Sequence:create(  
    14.     cc.MoveBy:create(2, cc.p(240,0)),  
    15.     cc.RotateBy:create(2, 540))  
    16.   
    17.   -- 执行动作  
    18.   grossini:runAction(action)  
    19.   
    20.   Helper.subtitleLabel:setString("Sequence: Move + Rotate")  
    21.   
    22.   return layer  
    23. end  
    24.   
    25. --------------------------------------  
    26. -- ActionSequence2  
    27. -- 动作序列2  
    28. --------------------------------------  
    29. local actionSequenceLayer = nil  
    30.   
    31. -- 动作序列回调1  
    32. local function ActionSequenceCallback1()  
    33.   -- 创建标签  
    34.   local label = cc.Label:createWithTTF("callback 1 called", s_markerFeltFontPath, 16)  
    35.   label:setAnchorPoint(cc.p(0.5, 0.5))-- 设置锚点  
    36.   label:setPosition(size.width / 4, size.height / 2)-- 设置显示位置  
    37.   -- 添加节点到层中  
    38.   actionSequenceLayer:addChild(label)  
    39. end  
    40.   
    41. -- 动作序列回调2  
    42. local function ActionSequenceCallback2(sender)  
    43.   -- 创建标签  
    44.   local label = cc.Label:createWithTTF("callback 2 called", s_markerFeltFontPath, 16)  
    45.   label:setAnchorPoint(cc.p(0.5, 0.5))-- 设置锚点  
    46.   label:setPosition(cc.p(size.width / 4 * 2, size.height / 2))-- 设置显示位置  
    47.   -- 添加节点到层中  
    48.   actionSequenceLayer:addChild(label)  
    49. end  
    50.   
    51. -- 动作序列回调3  
    52. local function ActionSequenceCallback3(sender)  
    53.   -- 创建标签  
    54.   local label = cc.Label:createWithTTF("callback 3 called", s_markerFeltFontPath, 16)  
    55.   label:setAnchorPoint(cc.p(0.5, 0.5))-- 设置锚点  
    56.   label:setPosition(cc.p(size.width / 4 * 3, size.height / 2))-- 设置显示位置  
    57.   
    58.   actionSequenceLayer:addChild(label)  
    59. end  
    60.   
    61. local function ActionSequence2()  
    62.   -- 创建层  
    63.   actionSequenceLayer = cc.Layer:create()  
    64.   initWithLayer(actionSequenceLayer)  
    65.   
    66.   alignSpritesLeft(1)  
    67.   
    68.   grossini:setVisible(false)-- 设置节点不可见  
    69.   -- 创建一个顺序执行的动作,分别为Place:放置节点到某个位置,Show:显示节点;MoveBy:移动到(100,0)的位置;CallFunc:调用回调方法  
    70.   local action = cc.Sequence:create(cc.Place:create(cc.p(200,200)),cc.Show:create(),cc.MoveBy:create(1, cc.p(100,0)), cc.CallFunc:create(ActionSequenceCallback1),cc.CallFunc:create(ActionSequenceCallback2),cc.CallFunc:create(ActionSequenceCallback3))  
    71.   
    72.   grossini:runAction(action)  
    73.   
    74.   Helper.subtitleLabel:setString("Sequence of InstantActions")  
    75.   return actionSequenceLayer  
    76. end  




    Spawn类:并行动作



    [Javascript] view plain copy
    1. --------------------------------------  
    2. -- ActionSpawn  
    3. -- 同时执行一批动作  
    4. --------------------------------------  
    5. local function ActionSpawn()  
    6.   local layer = cc.Layer:create()  
    7.   initWithLayer(layer)  
    8.   
    9.   alignSpritesLeft(1)  
    10.   
    11.   -- 创建一个并行动作,第一个动作为JumpBy,第二个动作为RotateBy  
    12.   local action = cc.Spawn:create(  
    13.     cc.JumpBy:create(2, cc.p(300,0), 50, 4),  
    14.     cc.RotateBy:create( 2,  720))  
    15.   
    16.   -- 执行动作  
    17.   grossini:runAction(action)  
    18.   
    19.   Helper.subtitleLabel:setString("Spawn: Jump + Rotate")  
    20.   
    21.   return layer  
    22. end  





    Cocos2d-x 中相关动作提供reverse方法,用于执行Action的相反动作,一般以XXXBy这类的,都具有reverse方法



    [Javascript] view plain copy
    1. --------------------------------------  
    2. -- ActionReverse  
    3. -- Action的相反动作  
    4. --------------------------------------  
    5. local function ActionReverse()  
    6.   local layer = cc.Layer:create()  
    7.   initWithLayer(layer)  
    8.   
    9.   alignSpritesLeft(1)  
    10.   
    11.   -- 创建JumpBy动作  
    12.   local jump = cc.JumpBy:create(2, cc.p(300,0), 50, 4)  
    13.   -- 动作序列,第一个动作为跳跃的动作,第二个是跳的反操作  
    14.   local action = cc.Sequence:create(jump, jump:reverse())  
    15.   
    16.   grossini:runAction(action)  
    17.   
    18.   Helper.subtitleLabel:setString("Reverse an action")  
    19.   
    20.   return layer  
    21. end  





    DelayTime类:延时动作



    [Javascript] view plain copy
    1. --------------------------------------  
    2. -- ActionDelaytime  
    3. -- 延迟动作  
    4. --------------------------------------  
    5. local function ActionDelaytime()  
    6.   local layer = cc.Layer:create()  
    7.   initWithLayer(layer)  
    8.   
    9.   alignSpritesLeft(1)  
    10.     
    11.   -- 创建移动动作,移动到(150,0)位置  
    12.   local move = cc.MoveBy:create(1, cc.p(150,0))  
    13.   -- 第一个动作move,然后延迟2秒,再继续移动  
    14.   local action = cc.Sequence:create(move, cc.DelayTime:create(2), move)  
    15.   
    16.   grossini:runAction(action)  
    17.   
    18.   Helper.subtitleLabel:setString("DelayTime: m + delay + m")  
    19.   return layer  
    20. end  





    Repeat类:重复执行动作很多次。次数由参数决定。 要无线循环动作,使用RepeatForever。

    RepeatForever类:无线循环一个动作。 如果要循环有限次数,请使用Repeat动作。



    [Javascript] view plain copy
    1. --------------------------------------  
    2. -- ActionRepeat  
    3. -- 重复动作  
    4. --------------------------------------  
    5. local function ActionRepeat()  
    6.   local layer = cc.Layer:create()  
    7.   initWithLayer(layer)  
    8.   
    9.   alignSpritesLeft(2)  
    10.   
    11.   -- 创建MoveBy动作,移动到(150,0)的位置  
    12.   local a1 = cc.MoveBy:create(1, cc.p(150,0))  
    13.   -- 创建重复执行的动作序列,这里重复3次  
    14.   local action1 = cc.Repeat:create(cc.Sequence:create(cc.Place:create(cc.p(60,60)), a1), 3)  
    15.   
    16. -- 创建MoveBy动作,移动到(150,0)的位置  
    17.   local a2 = cc.MoveBy:create(1, cc.p(150,0))  
    18.    -- 创建重复执行的动作序列,这里无限重复执行  
    19.   local action2 = cc.RepeatForever:create(cc.Sequence:create(a2, a1:reverse()))  
    20.   
    21.   -- 两个精灵分别执行动作  
    22.   kathia:runAction(action1)  
    23.   tamara:runAction(action2)  
    24.   
    25.   Helper.subtitleLabel:setString("Repeat / RepeatForever actions")  
    26.   return layer  
    27. end  
    28.   
    29. --------------------------------------  
    30. -- ActionRepeatForever  
    31. -- 无限重复的动作  
    32. --------------------------------------  
    33. local function repeatForever(sender)  
    34.   local repeatAction = cc.RepeatForever:create(cc.RotateBy:create(1.0, 360))  
    35.   
    36.   sender:runAction(repeatAction)  
    37. end  
    38.   
    39. local function ActionRepeatForever()  
    40.   local layer = cc.Layer:create()  
    41.   initWithLayer(layer)  
    42.   
    43.   centerSprites(1)  
    44.   
    45.   -- 创建一个动作序列,第一个动作先延时1秒,第二个动作调用无限重复的方法  
    46.   local action = cc.Sequence:create(  
    47.     cc.DelayTime:create(1),  
    48.     cc.CallFunc:create(repeatForever) )  
    49.   
    50.   grossini:runAction(action)  
    51.   
    52.   Helper.subtitleLabel:setString("CallFuncN + RepeatForever")  
    53.   return layer  
    54. end  
    55.   
    56. --------------------------------------  
    57. -- ActionRotateToRepeat  
    58. -- 重复执行旋转的动作  
    59. --------------------------------------  
    60. local function ActionRotateToRepeat()  
    61.   local layer = cc.Layer:create()  
    62.   initWithLayer(layer)  
    63.   
    64.   centerSprites(2)  
    65.   
    66.   -- 创建两个旋转的动作  
    67.   local act1 = cc.RotateTo:create(1, 90)  
    68.   local act2 = cc.RotateTo:create(1, 0)  
    69.   -- 创建动作序列  
    70.   local seq  = cc.Sequence:create(act1, act2)  
    71.   -- 一个无限重复的动作,一个重复10次的动作  
    72.   local rep1 = cc.RepeatForever:create(seq)  
    73.   local rep2 = cc.Repeat:create(seq:clone(), 10)  
    74.   
    75.   tamara:runAction(rep1)  
    76.   kathia:runAction(rep2)  
    77.   
    78.   Helper.subtitleLabel:setString("Repeat/RepeatForever + RotateTo")  
    79.   
    80.   return layer  
    81. end  




    CallFunc类:调用一个 'callback' 函数



    [Javascript] view plain copy
    1. --------------------------------------  
    2. -- ActionCallFunc  
    3. -- 调用方法  
    4. --------------------------------------  
    5. local callFuncLayer = nil  
    6.   
    7. -- 调用方法回调函数1  
    8. local function CallFucnCallback1()  
    9.   local label = cc.Label:createWithTTF("callback 1 called", s_markerFeltFontPath, 16)  
    10.   label:setAnchorPoint(cc.p(0.5, 0.5))  
    11.   label:setPosition(size.width / 4, size.height / 2)  
    12.   
    13.   callFuncLayer:addChild(label)  
    14. end  
    15. -- 调用方法回调函数2  
    16. local function CallFucnCallback2(sender)  
    17.   local label = cc.Label:createWithTTF("callback 2 called", s_markerFeltFontPath, 16)  
    18.   label:setAnchorPoint(cc.p(0.5, 0.5))  
    19.   label:setPosition(size.width / 4 * 2, size.height / 2)  
    20.   
    21.   callFuncLayer:addChild(label)  
    22. end  
    23. -- 调用方法回调函数3  
    24. local function CallFucnCallback3(sender)  
    25.   local label = cc.Label:createWithTTF("callback 3 called", s_markerFeltFontPath, 16)  
    26.   label:setAnchorPoint(cc.p(0.5, 0.5))  
    27.   label:setPosition(size.width / 4 * 3, size.height / 2)  
    28.   
    29.   callFuncLayer:addChild(label)  
    30. end  
    31.   
    32.   
    33. -- 调用“Call back"  
    34. local function ActionCallFunc()  
    35.   callFuncLayer = cc.Layer:create()  
    36.   initWithLayer(callFuncLayer)  
    37.   
    38.   centerSprites(3)  
    39.   
    40.   -- 创建动作序列,第一个动作为MoveBy,第二个动作为CallFunc  
    41.   local action = cc.Sequence:create(  
    42.     cc.MoveBy:create(2, cc.p(200,0)),  
    43.     cc.CallFunc:create(CallFucnCallback1) )  
    44.   -- 创建动作序列,第一个动作为ScaleBy,第二个动作为淡出,第三个动作为CallFunc  
    45.   local action2 = cc.Sequence:create(cc.ScaleBy:create(2, 2),cc.FadeOut:create(2),cc.CallFunc:create(CallFucnCallback2))  
    46.   -- 创建动作序列,第一个动作为RotateBy,第二个动作w为淡出,第三个动作为CallFunc  
    47.   local action3 = cc.Sequence:create(cc.RotateBy:create(3 , 360),cc.FadeOut:create(2),cc.CallFunc:create(CallFucnCallback3))  
    48.   
    49.   -- 运行动作  
    50.   grossini:runAction(action)  
    51.   tamara:runAction(action2)  
    52.   kathia:runAction(action3)  
    53.   
    54.   Helper.subtitleLabel:setString("Callbacks: CallFunc and friends")  
    55.   return callFuncLayer  
    56. end  




    OrbitCamera类:创建一个带有起始半径、半径差、起始z角、旋转z角的差、起始x角、旋转x角的差 这些参数的运动视角动作类



    [Javascript] view plain copy
    1. --------------------------------------  
    2. -- ActionOrbit  
    3. -- OrbitCamera类 :action 视角按照球面坐标轨迹 围绕屏幕中心进行旋转  
    4. --------------------------------------  
    5. local function ActionOrbit()  
    6.   local layer = cc.Layer:create()  
    7.   initWithLayer(layer)  
    8.   
    9.   centerSprites(3)  
    10.   -- 创建一个带有起始半径、半径差、起始z角、旋转z角的差、起始x角、旋转x角的差 这些参数的运动视角动作类  
    11.   local orbit1 = cc.OrbitCamera:create(2,1, 0, 0, 180, 0, 0)  
    12.   local action1 = cc.Sequence:create(orbit1, orbit1:reverse())  
    13.   
    14.     
    15.   local orbit2 = cc.OrbitCamera:create(2,1, 0, 0, 180, -45, 0)  
    16.   local action2 = cc.Sequence:create(orbit2, orbit2:reverse())  
    17.   
    18.   local orbit3 = cc.OrbitCamera:create(2,1, 0, 0, 180, 90, 0)  
    19.   local action3 = cc.Sequence:create(orbit3, orbit3:reverse())  
    20.   
    21.   kathia:runAction(cc.RepeatForever:create(action1))  
    22.   tamara:runAction(cc.RepeatForever:create(action2))  
    23.   grossini:runAction(cc.RepeatForever:create(action3))  
    24.   
    25.   local move = cc.MoveBy:create(3, cc.p(100,-100))  
    26.   local move_back = move:reverse()  
    27.   local seq = cc.Sequence:create(move, move_back)  
    28.   local rfe = cc.RepeatForever:create(seq)  
    29.   kathia:runAction(rfe)  
    30.   tamara:runAction(rfe:clone())  
    31.   grossini:runAction(rfe:clone())  
    32.   
    33.   
    34.   Helper.subtitleLabel:setString("OrbitCamera action")  
    35.   return layer  
    36. end  


    推荐阅读
    • Node.js 配置文件管理方法详解与最佳实践
      本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
    • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
    • vue引入echarts地图的四种方式
      一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
    • 本文介绍了Go语言中正则表达式的基本使用方法,并提供了一些实用的示例代码。 ... [详细]
    • 万事开头难,凡事都有套路,勇敢迈出第一步就成功一大半了。本节将带领初学者们迈出属于自己的一小步。本书的开发工具采用AndroidStudio࿰ ... [详细]
    • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
      PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
    • 在Linux系统中,find和grep是两个常用的命令,用于文件和文本的查找。本文将详细介绍这两个命令的区别及其常见用法。 ... [详细]
    • 本文介绍了Spring 2.0引入的TaskExecutor接口及其多种实现,包括同步和异步执行任务的方式。文章详细解释了如何在Spring应用中配置和使用这些线程池实现,以提高应用的性能和可管理性。 ... [详细]
    • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
    • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
    • Spring 切面配置中的切点表达式详解
      本文介绍了如何在Spring框架中使用AspectJ风格的切面配置,详细解释了切点表达式的语法和常见示例,帮助开发者更好地理解和应用Spring AOP。 ... [详细]
    • 在2019中国国际智能产业博览会上,百度董事长兼CEO李彦宏强调,人工智能应务实推进其在各行业的应用。随后,在“ABC SUMMIT 2019百度云智峰会”上,百度展示了通过“云+AI”推动AI工业化和产业智能化的最新成果。 ... [详细]
    • 在日常开发中,正则表达式是处理字符串时不可或缺的工具。本文汇总了常用的正则表达式,帮助开发者高效解决常见问题。例如,验证数字:`1$`;验证n位数字:`^\d{n}$`;验证至少n位数字:`^\d{n,}$`;验证m到n位数字:`^\d{m,n}$`。此外,还涵盖了验证零和非零数字、邮箱地址、手机号码等多种场景,建议关注并收藏以备不时之需。 ... [详细]
    • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
      本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
    • 在 Angular Google Maps 中实现图片嵌入信息窗口的功能,可以通过使用 `@agm/core` 库来实现。该库提供了丰富的 API 和组件,使得开发者可以轻松地在地图上的信息窗口中嵌入图片。本文将详细介绍如何配置和使用这些组件,以实现动态加载和显示图片的功能。此外,还将探讨一些常见的问题和解决方案,帮助开发者更好地集成这一功能。 ... [详细]
    author-avatar
    男人还是闷骚点好
    这个家伙很懒,什么也没留下!
    Tags | 热门标签
    RankList | 热门文章
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有