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

来源:互联网 发布:china战歌网络歌手 编辑:程序博客网 时间:2024/06/05 15:44

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动作可以被同时调用,并且最终的运动是几个单独运动的综合。


[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionMove  
  3. -- 动作移动  
  4. --------------------------------------  
  5. local function ActionMove()  
  6.   -- 创建层  
  7.   local layer = cc.Layer:create()  
  8.   -- 初始化层  
  9.   initWithLayer(layer)  
  10.     
  11.   centerSprites(3)  
  12.   -- MoveBy动作  
  13.   local actionBy = cc.MoveBy:create(2, cc.p(80, 80))  
  14.   -- MoveBy的逆反操作  
  15.   local actionByBack = actionBy:reverse()  
  16.   
  17.   --   
  18.   tamara:runAction(cc.MoveTo:create(2, cc.p(size.width - 40, size.height - 40)))  
  19.   grossini:runAction(cc.Sequence:create(actionBy, actionByBack))  
  20.   kathia:runAction(cc.MoveTo:create(1, cc.p(40, 40)))  
  21.   
  22.   Helper.subtitleLabel:setString("MoveTo / MoveBy")  
  23.   return layer  
  24. end  



ScaleTo:缩放动作

ScaleBy: 缩放动作,继承自ScaleTo,提供reverse方法

[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionScale  
  3. -- 动作缩放  
  4. --------------------------------------  
  5. local function ActionScale()  
  6.   local layer = cc.Layer:create()  
  7.   initWithLayer(layer)  
  8.   
  9.   centerSprites(3)  
  10.   
  11.   -- ScaleTo,第一个参数是缩放时间,第二个参数为缩放因子  
  12.   local actionTo = cc.ScaleTo:create(2.0, 0.5)  
  13.   -- ScaleBy, 第一个参数为缩放时间,第二、三个参数为缩放因子  
  14.   local actionBy = cc.ScaleBy:create(2.0, 1.0, 10.0)  
  15.   local actionBy2 = cc.ScaleBy:create(2.0, 5.0, 1.0)  
  16.   
  17.   -- 执行动作  
  18.   grossini:runAction(actionTo)  
  19.   -- 执行动作序列,先正常缩放,然后反执行相反操作  
  20.   tamara:runAction(cc.Sequence:create(actionBy, actionBy:reverse()))  
  21.   kathia:runAction(cc.Sequence:create(actionBy2, actionBy2:reverse()))  
  22.   
  23.   Helper.subtitleLabel:setString("ScaleTo / ScaleBy")  
  24.   return layer  
  25. end  



RotateBy类/RotateTo:旋转一个节点

[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionRotate  
  3. -- 动作旋转  
  4. --------------------------------------  
  5. local function ActionRotate()  
  6.   local layer = cc.Layer:create()  
  7.   initWithLayer(layer)  
  8.   
  9.   centerSprites(3)  
  10.   
  11.   -- RotateTo,第一个参数为持续时间,第二个参数为旋转角度  
  12.   local actionTo = cc.RotateTo:create( 2, 45)  
  13.   local actionTo2 = cc.RotateTo:create( 2, -45)  
  14.   local actionTo0 = cc.RotateTo:create(2 , 0)  
  15.   -- 执行动作序列,先选择45度之后,  
  16.   tamara:runAction(cc.Sequence:create(actionTo, actionTo0))  
  17.   
  18.   -- RotateBy,持续时间为2秒,旋转360度  
  19.   local actionBy = cc.RotateBy:create(2 , 360)  
  20.   local actionByBack = actionBy:reverse() -- 相反操作  
  21.   grossini:runAction(cc.Sequence:create(actionBy, actionByBack))  
  22.   
  23.   local action0Retain = cc.RotateTo:create(2 , 0)  
  24.   
  25.   kathia:runAction(cc.Sequence:create(actionTo2, action0Retain))  
  26.   
  27.   Helper.subtitleLabel:setString("RotateTo / RotateBy")  
  28.   return layer  
  29. end  



SkewTo:通过修改节点对象的skewX和skewY属性来使节点对象倾斜到一个给定的角度。

SkewBy:通过skewX和skewY的度数来使节点对象倾斜。




[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionSkew  
  3. -- 斜歪动作  
  4. --------------------------------------  
  5. local function ActionSkew()  
  6.   local layer = cc.Layer:create()  
  7.   initWithLayer(layer)  
  8.   
  9.   centerSprites(3)  
  10.   -- SkewTo,第一个参数是持续时间,第二个参数是X轴倾斜的角度,第三个是Y轴的倾斜角度  
  11.   local actionTo = cc.SkewTo:create(2, 37.2, -37.2)  
  12.   local actionToBack = cc.SkewTo:create(2, 0, 0)-- 返回的一个动作  
  13.   local actionBy = cc.SkewBy:create(2, 0.0, -90.0)  
  14.   local actionBy2 = cc.SkewBy:create(2, 45.0, 45.0)  
  15.   local actionByBack = actionBy:reverse()  
  16.   
  17.   -- 三个精灵执行动作序列  
  18.   tamara:runAction(cc.Sequence:create(actionTo, actionToBack))  
  19.   grossini:runAction(cc.Sequence:create(actionBy, actionByBack))  
  20.   kathia:runAction(cc.Sequence:create(actionBy2, actionBy2:reverse()))  
  21.   
  22.   Helper.subtitleLabel:setString("SkewTo / SkewBy")  
  23.   return layer  
  24. end  



[javascript] view plain copy
  1. --ActionRotationalSkewVSStandardSkew  
  2. --轮转的倾斜动作和标准的倾斜动作  
  3. local function ActionRotationalSkewVSStandardSkew()  
  4.   
  5.   local layer = cc.Layer:create()  
  6.   initWithLayer(layer)  
  7.   
  8.   -- 从父节点中删除一个节点,有一个cleanup参数。 如果这个节点是一个孤节点,那么什么都不会发生。  
  9.   tamara:removeFromParent(true);  
  10.   grossini:removeFromParent(true);  
  11.   kathia:removeFromParent(true);  
  12.     
  13.   -- 返回以点为单位的 OpenGL 视图的大小  
  14.   local s = cc.Director:getInstance():getWinSize();  
  15.   -- 宽高均为100的盒子  
  16.   local boxSize = cc.size(100.0, 100.0);  
  17.   -- 创建层颜色块,c4b,第一个参数是r,代表红色,第二个参数是g,代表绿色,第三个参数是b,代表蓝色,第四个参数是a,代表透明度  
  18.   local box = cc.LayerColor:create(cc.c4b(255,255,0,255));  
  19.   -- 设置锚点  
  20.   box:setAnchorPoint(cc.p(0.5,0.5));  
  21.   -- 设置盒子大小  
  22.   box:setContentSize( boxSize );  
  23.   -- 设置锚点为(0,0)当你摆放这个节点的时候。  
  24.   -- 这是一个内部方法,仅仅被Layer和Scene使用。不要在框架外调用。 默认值是false,但是在Layer和Scene中是true.  
  25.   box:ignoreAnchorPointForPosition(false);  
  26.   -- 设置显示位置  
  27.   box:setPosition(cc.p(s.width/2, s.height - 100 - box:getContentSize().height/2));  
  28.   -- 添加到层中  
  29.   layer:addChild(box);  
  30.   -- 创建一个标签  
  31.   local label = cc.Label:createWithTTF("Standard cocos2d Skew", s_markerFeltFontPath, 16);  
  32.   -- 设置锚点,这里是中心  
  33.   label:setAnchorPoint(cc.p(0.5, 0.5))  
  34.   label:setPosition(cc.p(s.width/2, s.height - 100 + label:getContentSize().height));  
  35.   layer:addChild(label);  
  36.   -- X轴倾斜360度  
  37.   local actionTo = cc.SkewBy:create(2, 360, 0);  
  38.   -- 动作返回  
  39.   local actionToBack = cc.SkewBy:create(2, -360, 0);  
  40.   local seq = cc.Sequence:create(actionTo, actionToBack)  
  41.   -- 运行动作序列  
  42.   box:runAction(seq);  
  43.     
  44.   -- 创建层黄颜色块,c4b,第一个参数是r,代表红色,第二个参数是g,代表绿色,第三个参数是b,代表蓝色,第四个参数是a,代表透明度  
  45.   box = cc.LayerColor:create(cc.c4b(255,255,0,255));  
  46.   box:setAnchorPoint(cc.p(0.5,0.5));  
  47.   box:setContentSize(boxSize);  
  48.   box:ignoreAnchorPointForPosition(false);  
  49.   box:setPosition(cc.p(s.width/2, s.height - 250 - box:getContentSize().height/2));  
  50.   layer:addChild(box);  
  51.   label = cc.Label:createWithTTF("Rotational Skew", s_markerFeltFontPath, 16);  
  52.   label:setAnchorPoint(cc.p(0.5, 0.5))  
  53.   label:setPosition(cc.p(s.width/2, s.height - 250 + label:getContentSize().height/2));  
  54.   layer:addChild(label);  
  55.   local actionTo2 = cc.RotateBy:create(2, 360, 0);  
  56.   local actionToBack2 = cc.RotateBy:create(2, -360, 0);  
  57.   seq = cc.Sequence:create(actionTo2, actionToBack2)  
  58.   box:runAction(seq);  
  59.   
  60.   Helper.subtitleLabel:setString("Skew Comparison")  
  61.   return layer;  
  62. end  


[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionSkewRotate  
  3. -- 歪斜+旋转+缩放  
  4. --------------------------------------  
  5. local function ActionSkewRotate()  
  6.   -- 创建层  
  7.   local layer = cc.Layer:create()  
  8.   initWithLayer(layer)  
  9.   
  10.   -- 从父节点移除子节点  
  11.   tamara:removeFromParent(true)  
  12.   grossini:removeFromParent(true)  
  13.   kathia:removeFromParent(true)  
  14.   
  15.   -- 盒子大小  
  16.   local boxSize = cc.size(100.0, 100.0)  
  17.   -- 层颜色,第1、2、3分别为红绿篮颜色值,第4个为透明度值  
  18.   local box = cc.LayerColor:create(cc.c4b(255, 255, 0, 255))  
  19.   -- 设置锚点  
  20.   box:setAnchorPoint(cc.p(0, 0))  
  21.   -- 设置位置  
  22.   box:setPosition(190, 110)  
  23.   -- 设置内容大小  
  24.   box:setContentSize(boxSize)  
  25.   
  26.   --标记大小  
  27.   local markrside = 10.0  
  28.   local uL = cc.LayerColor:create(cc.c4b(255, 0, 0, 255))  
  29.   box:addChild(uL)  
  30.   uL:setContentSize(cc.size(markrside, markrside))  
  31.   uL:setPosition(0, boxSize.height - markrside)  
  32.   uL:setAnchorPoint(cc.p(0, 0))  
  33.   
  34.   local uR = cc.LayerColor:create(cc.c4b(0, 0, 255, 255))  
  35.   box:addChild(uR)  
  36.   uR:setContentSize(cc.size(markrside, markrside))  
  37.   uR:setPosition(boxSize.width - markrside, boxSize.height - markrside)  
  38.   uR:setAnchorPoint(cc.p(0, 0))  
  39.   layer:addChild(box)  
  40.   
  41.   -- 三个动作SkewTo、RotateTo、ScaleTo  
  42.   local actionTo = cc.SkewTo:create(2, 0, 2)  
  43.   local rotateTo = cc.RotateTo:create(2, 61.0)  
  44.   local actionScaleTo = cc.ScaleTo:create(2, -0.44, 0.47)  
  45.   
  46.   local actionScaleToBack = cc.ScaleTo:create(2, 1.0, 1.0)  
  47.   local rotateToBack = cc.RotateTo:create(2, 0)  
  48.   local actionToBack = cc.SkewTo:create(2, 0, 0)  
  49.   
  50.   -- 顺序执行三个动作序列  
  51.   box:runAction(cc.Sequence:create(actionTo, actionToBack))  
  52.   box:runAction(cc.Sequence:create(rotateTo, rotateToBack))  
  53.   box:runAction(cc.Sequence:create(actionScaleTo, actionScaleToBack))  
  54.   
  55.   Helper.subtitleLabel:setString("Skew + Rotate + Scale")  
  56.   return layer  
  57. end  

JumpTo类:模仿跳跃的轨迹移动节点

JumpBy类:模仿跳跃的轨迹移动节点.提供reverse方法

[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionJump  
  3. -- 跳的动作  
  4. --------------------------------------  
  5. local function ActionJump()  
  6.   -- 创建层  
  7.   local layer = cc.Layer:create()  
  8.   initWithLayer(layer)  
  9.   
  10.   centerSprites(3)  
  11.   -- 模仿跳跃的轨迹移动节点,第一个参数为持续时间,第二个参数为位置,第三个参数为跳的高度,第四个参数跳的次数  
  12.   local actionTo = cc.JumpTo:create(2, cc.p(300,300), 50, 4)  
  13.   local actionBy = cc.JumpBy:create(2, cc.p(300,0), 50, 4)  
  14.   local actionUp = cc.JumpBy:create(2, cc.p(0,0), 80, 4)  
  15.   local actionByBack = actionBy:reverse()-- 相反操作  
  16.     
  17.   -- 执行actionTo动作  
  18.   tamara:runAction(actionTo)  
  19.   -- 执行序列动作  
  20.   grossini:runAction(cc.Sequence:create(actionBy, actionByBack))  
  21.   -- 执行无限循环动作  
  22.   kathia:runAction(cc.RepeatForever:create(actionUp))  
  23.   
  24.   Helper.subtitleLabel:setString("JumpTo / JumpBy")  
  25.   return layer  
  26. end  

CardinalSplineBy类:基础曲线路径


[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionCardinalSpline  
  3. -- 曲线运动  
  4. --------------------------------------  
  5. local function ActionCardinalSpline()  
  6.   local layer = cc.Layer:create()  
  7.   initWithLayer(layer)  
  8.   
  9.   centerSprites(2)  
  10.   -- 位置数组  
  11.   local array = {  
  12.     cc.p(0, 0),  
  13.     cc.p(size.width / 2 - 30, 0),  
  14.     cc.p(size.width / 2 - 30, size.height - 80),  
  15.     cc.p(0, size.height - 80),  
  16.     cc.p(0, 0),  
  17.   }  
  18.   -- 创建一个连续的基础曲线动作的点数组集合  
  19.   local action = cc.CardinalSplineBy:create(3, array, 0)  
  20.   -- 返回执行与本Action对象相反操作的新Action对象  
  21.   local reverse = action:reverse()  
  22.   -- 动作序列  
  23.   local seq = cc.Sequence:create(action, reverse)  
  24.   
  25.   tamara:setPosition(cc.p(50, 50))  
  26.   tamara:runAction(seq)  
  27.   
  28.   -- 第一个参数是duration:持续时间,第二个参数为位置数组,第三个参数为tension,表示张力  
  29.   local action2 = cc.CardinalSplineBy:create(3, array, 1)  
  30.   local reverse2 = action2:reverse()  
  31.   -- 创建动作序列  
  32.   local seq2 = cc.Sequence:create(action2, reverse2)  
  33.   
  34.   kathia:setPosition(cc.p(size.width / 2, 50))  
  35.   kathia:runAction(seq2)  
  36.   --[[  
  37.   local function drawCardinalSpline()  
  38.   kmGLPushMatrix()  
  39.   kmGLTranslatef(50, 50, 0)  
  40.   cc.DrawPrimitives.drawCardinalSpline(array, 0, 100)  
  41.   kmGLPopMatrix()  
  42.   
  43.   kmGLPushMatrix()  
  44.   kmGLTranslatef(size.width / 2, 50, 0)  
  45.   cc.DrawPrimitives.drawCardinalSpline(array, 1, 100)  
  46.   kmGLPopMatrix()  
  47.   end  
  48.   
  49.   array:retain()  
  50.   local glNode  = gl.glNodeCreate()  
  51.   glNode:setContentSize(cc.size(size.width, size.height))  
  52.   glNode:setAnchorPoint(cc.p(0.5, 0.5))  
  53.   glNode:registerScriptDrawHandler(drawCardinalSpline)  
  54.   layer:addChild(glNode,-10)  
  55.   glNode:setPosition( size.width / 2, size.height / 2)  
  56.   ]]--  
  57.   Helper.titleLabel:setString("CardinalSplineBy / CardinalSplineAt")  
  58.   Helper.subtitleLabel:setString("Cardinal Spline paths.\nTesting different tensions for one array")  
  59.   return layer  
  60. end  

CatmullRomBy类 :这是一个按照笛卡尔曲线移动目标点的动作.


[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionCatmullRom  
  3. -- 笛卡尔曲线运动  
  4. --------------------------------------  
  5. local function ActionCatmullRom()  
  6.   local layer = cc.Layer:create()  
  7.   initWithLayer(layer)  
  8.     
  9.   centerSprites(2)  
  10.   -- 设置精灵位置  
  11.   tamara:setPosition(cc.p(50, 50))  
  12.   -- 定义位置数组  
  13.   local array = {  
  14.     cc.p(0, 0),  
  15.     cc.p(80, 80),  
  16.     cc.p(size.width - 80, 80),  
  17.     cc.p(size.width - 80, size.height - 80),  
  18.     cc.p(80, size.height - 80),  
  19.     cc.p(80, 80),  
  20.     cc.p(size.width / 2, size.height / 2),  
  21.   }  
  22.     
  23.   -- 创建笛卡尔曲线运动,第一个参数为持续时间,第二个参数为位置数组  
  24.   local action = cc.CatmullRomBy:create(3, array)  
  25.   local reverse = action:reverse()-- 相反操作  
  26.   -- 创建动作序列  
  27.   local seq = cc.Sequence:create(action, reverse)  
  28.   tamara:runAction(seq)  
  29.   
  30.   
  31.   local array2 = {  
  32.     cc.p(size.width / 2, 30),  
  33.     cc.p(size.width  -80, 30),  
  34.     cc.p(size.width - 80, size.height - 80),  
  35.     cc.p(size.width / 2, size.height - 80),  
  36.     cc.p(size.width / 2, 30),  
  37.   }  
  38.   
  39.   local action2 = cc.CatmullRomTo:create(3, array2)  
  40.   local reverse2 = action2:reverse()  
  41.   local seq2 = cc.Sequence:create(action2, reverse2)  
  42.   kathia:runAction(seq2)  
  43.   --[[  
  44.   local function drawCatmullRom()  
  45.   kmGLPushMatrix()  
  46.   kmGLTranslatef(50, 50, 0)  
  47.   cc.DrawPrimitives.drawCatmullRom(array, 50)  
  48.   kmGLPopMatrix()  
  49.   
  50.   cc.DrawPrimitives.drawCatmullRom(array2,50)  
  51.   end  
  52.   
  53.   array:retain()  
  54.   array2:retain()  
  55.   local glNode  = gl.glNodeCreate()  
  56.   glNode:setContentSize(cc.size(size.width, size.height))  
  57.   glNode:setAnchorPoint(cc.p(0.5, 0.5))  
  58.   glNode:registerScriptDrawHandler(drawCatmullRom)  
  59.   layer:addChild(glNode,-10)  
  60.   glNode:setPosition( size.width / 2, size.height / 2)  
  61.   ]]--  
  62.   
  63.   -- 设置标题  
  64.   Helper.titleLabel:setString("CatmullRomBy / CatmullRomTo")  
  65.   Helper.subtitleLabel:setString("Catmull Rom spline paths. Testing reverse too")  
  66.   return layer  
  67. end  

BezierBy类:贝塞尔曲线动作。提供reverse方法,用于执行相反操作

BezierTo类:贝塞尔曲线动作。


[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionBezier  
  3. -- 贝塞尔曲线运动  
  4. --------------------------------------  
  5. local function ActionBezier()  
  6.   local layer = cc.Layer:create()  
  7.   initWithLayer(layer)  
  8.   
  9.   centerSprites(3)  
  10.   
  11.   -- sprite 1  
  12.   --[[  
  13.   local bezier = ccBezierConfig()  
  14.   bezier.controlPoint_1 = cc.p(0, size.height / 2)  
  15.   bezier.controlPoint_2 = cc.p(300, - size.height / 2)  
  16.   bezier.endPosition = cc.p(300, 100)  
  17.   ]]--  
  18.   -- 贝塞尔曲线配置结构  
  19.   local bezier = {  
  20.     cc.p(0, size.height / 2),  
  21.     cc.p(300, - size.height / 2),  
  22.     cc.p(300, 100),  
  23.   }  
  24.   -- 以持续时间和贝塞尔曲线的配置结构体为参数创建动作  
  25.   local bezierForward = cc.BezierBy:create(3, bezier)  
  26.   local bezierBack = bezierForward:reverse()  
  27.   -- 无限循环执行序列  
  28.   local rep = cc.RepeatForever:create(cc.Sequence:create(bezierForward, bezierBack))  
  29.   
  30.   -- sprite 2  
  31.   tamara:setPosition(cc.p(80,160))  
  32.   --[[  
  33.   local bezier2 = ccBezierConfig()  
  34.   bezier2.controlPoint_1 = cc.p(100, size.height / 2)  
  35.   bezier2.controlPoint_2 = cc.p(200, - size.height / 2)  
  36.   bezier2.endPosition = cc.p(240, 160)  
  37.   ]]--  
  38.   local bezier2 ={  
  39.     cc.p(100, size.height / 2),  
  40.     cc.p(200, - size.height / 2),  
  41.     cc.p(240, 160)  
  42.   }  
  43.   -- 创建贝塞尔曲线动作,第一个参数为持续时间,第二个参数为贝塞尔曲线结构  
  44.   local bezierTo1 = cc.BezierTo:create(2, bezier2)  
  45.   
  46.   -- sprite 3  
  47.   kathia:setPosition(cc.p(400,160))  
  48.   local bezierTo2 = cc.BezierTo:create(2, bezier2)  
  49.   
  50.   -- 运行动作  
  51.   grossini:runAction(rep)  
  52.   tamara:runAction(bezierTo1)  
  53.   kathia:runAction(bezierTo2)  
  54.   
  55.   Helper.subtitleLabel:setString("BezierTo / BezierBy")  
  56.   return layer  
  57. end  

Blink类:闪烁动作


[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionBlink  
  3. -- 闪烁运动  
  4. --------------------------------------  
  5. local function ActionBlink()  
  6.   -- 创建层  
  7.   local layer = cc.Layer:create()  
  8.   -- 初始化层  
  9.   initWithLayer(layer)  
  10.     
  11.   centerSprites(2)  
  12.   
  13.   -- 创建两个闪烁动作,第一个参数为持续时间,第二个参数为闪烁次数  
  14.   local action1 = cc.Blink:create(2, 10)  
  15.   local action2 = cc.Blink:create(2, 5)  
  16.   
  17.   -- 两个精灵执行动作  
  18.   tamara:runAction(action1)  
  19.   kathia:runAction(action2)  
  20.   
  21.   Helper.subtitleLabel:setString("Blink")  
  22.   
  23.   return layer  
  24. end  

FadeTo类:渐变动作

FadeIn类:渐变动作 "reverse"动作是FadeOut

FadeOut类:渐变动作 "reverse"动作是FadeIn


[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionFade  
  3. -- 渐变动作  
  4. --------------------------------------  
  5. local function ActionFade()  
  6.   local layer = cc.Layer:create()  
  7.   initWithLayer(layer)  
  8.   
  9.   centerSprites(2)  
  10.     
  11.   -- 设置透明度  
  12.   tamara:setOpacity(0)  
  13.   -- 创建淡进的动作  
  14.   local action1 = cc.FadeIn:create(1)  
  15.   -- reverse动作,FadeOut  
  16.   local action1Back = action1:reverse()  
  17.   
  18.   -- 创建淡出的动作  
  19.   local action2 = cc.FadeOut:create(1)  
  20.   -- reverse动作,FadeIn动作  
  21.   local action2Back = action2:reverse()  
  22.   
  23.   -- 执行动作  
  24.   tamara:runAction(cc.Sequence:create( action1, action1Back))  
  25.   kathia:runAction(cc.Sequence:create( action2, action2Back))  
  26.   
  27.   Helper.subtitleLabel:setString("FadeIn / FadeOut")  
  28.   
  29.   return layer  
  30. end  

TintTo类:节点变色动作

TintBy类:节点变色动作,提供reverse方法。


[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionTint  
  3. -- 变色动作  
  4. --------------------------------------  
  5. local function ActionTint()  
  6.   local layer = cc.Layer:create()  
  7.   initWithLayer(layer)  
  8.   
  9.   centerSprites(2)  
  10.   -- 用持续时间和颜色创建动作,第一个参数为持续时间,后面三个为颜色值  
  11.   local action1 = cc.TintTo:create(2, 255, 0, 255)  
  12.   local action2 = cc.TintBy:create(2, -127, -255, -127)  
  13.   local action2Back = action2:reverse()  
  14.   
  15.   
  16.   tamara:runAction(action1)  
  17.   kathia:runAction(cc.Sequence:create(action2, action2Back))  
  18.   
  19.   Helper.subtitleLabel:setString("TintTo / TintBy")  
  20.   
  21.   return layer  
  22. end  

Animation类:一个用来在精灵对象上表现动画的动画对象.

AnimationCache类:动画缓存单例类。 如何你想要保存动画,你需要使用这个缓存

Animate类:创建序列帧动画


[javascript] view plain copy
  1. --------------------------------------  
  2. -- ActionAnimate  
  3. -- 动画动作  
  4. --------------------------------------  
  5. local function ActionAnimate()  
  6.   local layer = cc.Layer:create()  
  7.   initWithLayer(layer)  
  8.   
  9.   centerSprites(3)  
  10.   -- 创建动画  
  11.   local animation = cc.Animation:create()  
  12.   local number, name  
  13.   for i = 1, 14 do  
  14.     if i < 10 then  
  15.       number = "0"..i  
  16.     else  
  17.       number = i  
  18.     end  
  19.     name = "Images/grossini_dance_"..number..".png"  
  20.     -- 用图片名称加一个精灵帧到动画中  
  21.     animation:addSpriteFrameWithFile(name)  
  22.   end  
  23.   -- should last 2.8 seconds. And there are 14 frames.  
  24.   -- 在2.8秒内持续14帧  
  25.   animation:setDelayPerUnit(2.8 / 14.0)  
  26.   -- 设置"当动画结束时,是否要存储这些原始帧"true为存储  
  27.   animation:setRestoreOriginalFrame(true)  
  28.   
  29.   -- 创建序列帧动画  
  30.   local action = cc.Animate:create(animation)  
  31.   grossini:runAction(cc.Sequence:create(action, action:reverse()))  
  32.   
  33.   -- 动画缓存单例类。 如何你想要保存动画,你需要使用这个缓存。  
  34.   local cache = cc.AnimationCache:getInstance()  
  35.   -- 添加入一个动画到缓存,并以name作为标示  
  36.   cache:addAnimations("animations/animations-2.plist")  
  37.   -- Returns 查找并返回名了name的动画。 如果找不到,返回NULL.  
  38.   local animation2 = cache:getAnimation("dance_1")  
  39.   
  40.   -- 创建第二个序列帧动画  
  41.   local action2 = cc.Animate:create(animation2)  
  42.   -- 执行动作序列  
  43.   tamara:runAction(cc.Sequence:create(action2, action2:reverse()))  
  44.   
  45.   -- 克隆一个动画  
  46.   local animation3 = animation2:clone()  
  47.     
  48.   -- 设置循环次数  
  49.   animation3:setLoops(4)  
  50.   
  51.   -- 创建一个序列帧动画  
  52.   local action3 = cc.Animate:create(animation3)  
  53.   -- 执行动作  
  54.   kathia:runAction(action3)  
  55.   
  56.   Helper.titleLabel:setString("Animation")  
  57.   Helper.subtitleLabel:setString("Center: Manual animation. Border: using file format animation")  
  58.   
  59.   return layer  
  60. 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  
阅读全文
0 0
原创粉丝点击