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

Cocos2d x 3 2 Lua示例 ActionTest 动作测试

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

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

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

   

---------------------------------------- ActionMove-- 动作移动--------------------------------------local function ActionMove()  -- 创建层  local layer = cc.Layer:create()  -- 初始化层  initWithLayer(layer)    centerSprites(3)  -- MoveBy动作  local actionBy = cc.MoveBy:create(2, cc.p(80, 80))  -- MoveBy的逆反操作  local actionByBack = actionBy:reverse()  --   tamara:runAction(cc.MoveTo:create(2, cc.p(size.width - 40, size.height - 40)))  grossini:runAction(cc.Sequence:create(actionBy, actionByBack))  kathia:runAction(cc.MoveTo:create(1, cc.p(40, 40)))  Helper.subtitleLabel:setString("MoveTo / MoveBy"return layerend



ScaleTo:缩放动作

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

---------------------------------------- ActionScale-- 动作缩放--------------------------------------local function ActionScale(local layer = cc.Layer:create(initWithLayer(layercenterSprites(3)  -- ScaleTo,第一个参数是缩放时间,第二个参数为缩放因子  local actionTo = cc.ScaleTo:create(2.0, 0.5)  -- ScaleBy, 第一个参数为缩放时间,第二、三个参数为缩放因子  local actionBy = cc.ScaleBy:create(2.0, 1.0, 10.0local actionBy2 = cc.ScaleBy:create(2.0, 5.0, 1.0)  -- 执行动作  grossini:runAction(actionTo)  -- 执行动作序列,先正常缩放,然后反执行相反操作  tamara:runAction(cc.Sequence:create(actionBy, actionBy:reverse()))  kathia:runAction(cc.Sequence:create(actionBy2, actionBy2:reverse()))  Helper.subtitleLabel:setString("ScaleTo / ScaleBy"return layerend



RotateBy类/RotateTo:旋转一个节点

 

---------------------------------------- ActionRotate-- 动作旋转--------------------------------------local function ActionRotate(local layer = cc.Layer:create(initWithLayer(layercenterSprites(3)  -- RotateTo,第一个参数为持续时间,第二个参数为旋转角度  local actionTo = cc.RotateTo:create( 2, 45local actionTo2 = cc.RotateTo:create( 2, -45local actionTo0 = cc.RotateTo:create(2 , 0)  -- 执行动作序列,先选择45度之后,  tamara:runAction(cc.Sequence:create(actionTo, actionTo0))  -- RotateBy,持续时间为2秒,旋转360度  local actionBy = cc.RotateBy:create(2 , 360local actionByBack = actionBy:reverse() -- 相反操作  grossini:runAction(cc.Sequence:create(actionBy, actionByBack))  local action0Retain = cc.RotateTo:create(2 , 0kathia:runAction(cc.Sequence:create(actionTo2, action0Retain))  Helper.subtitleLabel:setString("RotateTo / RotateBy"return layerend



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

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




---------------------------------------- ActionSkew-- 斜歪动作--------------------------------------local function ActionSkew(local layer = cc.Layer:create(initWithLayer(layercenterSprites(3)  -- SkewTo,第一个参数是持续时间,第二个参数是X轴倾斜的角度,第三个是Y轴的倾斜角度  local actionTo = cc.SkewTo:create(2, 37.2, -37.2local actionToBack = cc.SkewTo:create(2, 0, 0)-- 返回的一个动作  local actionBy = cc.SkewBy:create(2, 0.0, -90.0local actionBy2 = cc.SkewBy:create(2, 45.0, 45.0local actionByBack = actionBy:reverse()  -- 三个精灵执行动作序列  tamara:runAction(cc.Sequence:create(actionTo, actionToBack))  grossini:runAction(cc.Sequence:create(actionBy, actionByBack))  kathia:runAction(cc.Sequence:create(actionBy2, actionBy2:reverse()))  Helper.subtitleLabel:setString("SkewTo / SkewBy"return layerend


   
--ActionRotationalSkewVSStandardSkew--轮转的倾斜动作和标准的倾斜动作local function ActionRotationalSkewVSStandardSkew(local layer = cc.Layer:create(initWithLayer(layer)  -- 从父节点中删除一个节点,有一个cleanup参数。 如果这个节点是一个孤节点,那么什么都不会发生。  tamara:removeFromParent(true);  grossini:removeFromParent(true);  kathia:removeFromParent(true);    -- 返回以点为单位的 OpenGL 视图的大小  local s = cc.Director:getInstance():getWinSize();  -- 宽高均为100的盒子  local boxSize = cc.size(100.0, 100.0);  -- 创建层颜色块,c4b,第一个参数是r,代表红色,第二个参数是g,代表绿色,第三个参数是b,代表蓝色,第四个参数是a,代表透明度  local box = cc.LayerColor:create(cc.c4b(255,255,0,255));  -- 设置锚点  box:setAnchorPoint(cc.p(0.5,0.5));  -- 设置盒子大小  box:setContentSize( boxSize );  -- 设置锚点为(0,0)当你摆放这个节点的时候。  -- 这是一个内部方法,仅仅被LayerScene使用。不要在框架外调用。 默认值是false,但是在LayerScene中是truebox:ignoreAnchorPointForPosition(false);  -- 设置显示位置  box:setPosition(cc.p(s.width/2, s.height - 100 - box:getContentSize().height/2));  -- 添加到层中  layer:addChild(box);  -- 创建一个标签  local label = cc.Label:createWithTTF("Standard cocos2d Skew", s_markerFeltFontPath, 16);  -- 设置锚点,这里是中心  label:setAnchorPoint(cc.p(0.5, 0.5))  label:setPosition(cc.p(s.width/2, s.height - 100 + label:getContentSize().height));  layer:addChild(label);  -- X轴倾斜360度  local actionTo = cc.SkewBy:create(2, 360, 0);  -- 动作返回  local actionToBack = cc.SkewBy:create(2, -360, 0);  local seq = cc.Sequence:create(actionTo, actionToBack)  -- 运行动作序列  box:runAction(seq);    -- 创建层黄颜色块,c4b,第一个参数是r,代表红色,第二个参数是g,代表绿色,第三个参数是b,代表蓝色,第四个参数是a,代表透明度  box = cc.LayerColor:create(cc.c4b(255,255,0,255));  box:setAnchorPoint(cc.p(0.5,0.5));  box:setContentSize(boxSize);  box:ignoreAnchorPointForPosition(false);  box:setPosition(cc.p(s.width/2, s.height - 250 - box:getContentSize().height/2));  layer:addChild(box);  label = cc.Label:createWithTTF("Rotational Skew", s_markerFeltFontPath, 16);  label:setAnchorPoint(cc.p(0.5, 0.5))  label:setPosition(cc.p(s.width/2, s.height - 250 + label:getContentSize().height/2));  layer:addChild(label);  local actionTo2 = cc.RotateBy:create(2, 360, 0);  local actionToBack2 = cc.RotateBy:create(2, -360, 0);  seq = cc.Sequence:create(actionTo2, actionToBack2box:runAction(seq);  Helper.subtitleLabel:setString("Skew Comparison"return layer;end


---------------------------------------- ActionSkewRotate-- 歪斜+旋转+缩放--------------------------------------local function ActionSkewRotate()  -- 创建层  local layer = cc.Layer:create(initWithLayer(layer)  -- 从父节点移除子节点  tamara:removeFromParent(truegrossini:removeFromParent(truekathia:removeFromParent(true)  -- 盒子大小  local boxSize = cc.size(100.0, 100.0)  -- 层颜色,第1、2、3分别为红绿篮颜色值,第4个为透明度值  local box = cc.LayerColor:create(cc.c4b(255, 255, 0, 255))  -- 设置锚点  box:setAnchorPoint(cc.p(0, 0))  -- 设置位置  box:setPosition(190, 110)  -- 设置内容大小  box:setContentSize(boxSize)  --标记大小  local markrside = 10.0  local uL = cc.LayerColor:create(cc.c4b(255, 0, 0, 255))  box:addChild(uLuL:setContentSize(cc.size(markrside, markrside))  uL:setPosition(0, boxSize.height - markrsideuL:setAnchorPoint(cc.p(0, 0))  local uR = cc.LayerColor:create(cc.c4b(0, 0, 255, 255))  box:addChild(uRuR:setContentSize(cc.size(markrside, markrside))  uR:setPosition(boxSize.width - markrside, boxSize.height - markrsideuR:setAnchorPoint(cc.p(0, 0))  layer:addChild(box)  -- 三个动作SkewToRotateToScaleTo  local actionTo = cc.SkewTo:create(2, 0, 2local rotateTo = cc.RotateTo:create(2, 61.0local actionScaleTo = cc.ScaleTo:create(2, -0.44, 0.47local actionScaleToBack = cc.ScaleTo:create(2, 1.0, 1.0local rotateToBack = cc.RotateTo:create(2, 0local actionToBack = cc.SkewTo:create(2, 0, 0)  -- 顺序执行三个动作序列  box:runAction(cc.Sequence:create(actionTo, actionToBack))  box:runAction(cc.Sequence:create(rotateTo, rotateToBack))  box:runAction(cc.Sequence:create(actionScaleTo, actionScaleToBack))  Helper.subtitleLabel:setString("Skew + Rotate + Scale"return layerend
  
JumpTo类:模仿跳跃的轨迹移动节点

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

---------------------------------------- ActionJump-- 跳的动作--------------------------------------local function ActionJump()  -- 创建层  local layer = cc.Layer:create(initWithLayer(layercenterSprites(3)  -- 模仿跳跃的轨迹移动节点,第一个参数为持续时间,第二个参数为位置,第三个参数为跳的高度,第四个参数跳的次数  local actionTo = cc.JumpTo:create(2, cc.p(300,300), 50, 4)  local actionBy = cc.JumpBy:create(2, cc.p(300,0), 50, 4)  local actionUp = cc.JumpBy:create(2, cc.p(0,0), 80, 4)  local actionByBack = actionBy:reverse()-- 相反操作    -- 执行actionTo动作  tamara:runAction(actionTo)  -- 执行序列动作  grossini:runAction(cc.Sequence:create(actionBy, actionByBack))  -- 执行无限循环动作  kathia:runAction(cc.RepeatForever:create(actionUp))  Helper.subtitleLabel:setString("JumpTo / JumpBy"return layerend

CardinalSplineBy类:基础曲线路径


---------------------------------------- ActionCardinalSpline-- 曲线运动--------------------------------------local function ActionCardinalSpline(local layer = cc.Layer:create(initWithLayer(layercenterSprites(2)  -- 位置数组  local array = {    cc.p(0, 0),    cc.p(size.width / 2 - 30, 0),    cc.p(size.width / 2 - 30, size.height - 80),    cc.p(0, size.height - 80),    cc.p(0, 0),  }  -- 创建一个连续的基础曲线动作的点数组集合  local action = cc.CardinalSplineBy:create(3, array, 0)  -- 返回执行与本Action对象相反操作的新Action对象  local reverse = action:reverse()  -- 动作序列  local seq = cc.Sequence:create(action, reverse)  tamara:setPosition(cc.p(50, 50))  tamara:runAction(seq)  -- 第一个参数是duration:持续时间,第二个参数为位置数组,第三个参数为tension,表示张力  local action2 = cc.CardinalSplineBy:create(3, array, 1)  local reverse2 = action2:reverse()  -- 创建动作序列  local seq2 = cc.Sequence:create(action2, reverse2)  kathia:setPosition(cc.p(size.width / 2, 50))  kathia:runAction(seq2)  --[[  local function drawCardinalSpline(kmGLPushMatrix(kmGLTranslatef(50, 50, 0cc.DrawPrimitives.drawCardinalSpline(array, 0, 100kmGLPopMatrix(kmGLPushMatrix(kmGLTranslatef(size.width / 2, 50, 0)  cc.DrawPrimitives.drawCardinalSpline(array, 1, 100)  kmGLPopMatrix()  end  array:retain()  local glNode  = gl.glNodeCreate()  glNode:setContentSize(cc.size(size.width, size.height))  glNode:setAnchorPoint(cc.p(0.5, 0.5))  glNode:registerScriptDrawHandler(drawCardinalSpline)  layer:addChild(glNode,-10)  glNode:setPosition( size.width / 2, size.height / 2)  ]]--  Helper.titleLabel:setString("CardinalSplineBy / CardinalSplineAt")  Helper.subtitleLabel:setString("Cardinal Spline paths.\nTesting different tensions for one array")  return layerend

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


---------------------------------------- ActionCatmullRom-- 笛卡尔曲线运动--------------------------------------local function ActionCatmullRom(local layer = cc.Layer:create(initWithLayer(layer)    centerSprites(2)  -- 设置精灵位置  tamara:setPosition(cc.p(50, 50))  -- 定义位置数组  local array = {    cc.p(0, 0),    cc.p(80, 80),    cc.p(size.width - 80, 80),    cc.p(size.width - 80, size.height - 80),    cc.p(80, size.height - 80),    cc.p(80, 80),    cc.p(size.width / 2, size.height / 2),  }    -- 创建笛卡尔曲线运动,第一个参数为持续时间,第二个参数为位置数组  local action = cc.CatmullRomBy:create(3, array)  local reverse = action:reverse()-- 相反操作  -- 创建动作序列  local seq = cc.Sequence:create(action, reverse)  tamara:runAction(seq)  local array2 = {    cc.p(size.width / 2, 30),    cc.p(size.width  -80, 30),    cc.p(size.width - 80, size.height - 80),    cc.p(size.width / 2, size.height - 80),    cc.p(size.width / 2, 30),  }  local action2 = cc.CatmullRomTo:create(3, array2)  local reverse2 = action2:reverse()  local seq2 = cc.Sequence:create(action2, reverse2)  kathia:runAction(seq2)  --[[  local function drawCatmullRom(kmGLPushMatrix(kmGLTranslatef(50, 50, 0cc.DrawPrimitives.drawCatmullRom(array, 50kmGLPopMatrix(cc.DrawPrimitives.drawCatmullRom(array2,50end  array:retain(array2:retain(local glNode  = gl.glNodeCreate(glNode:setContentSize(cc.size(size.width, size.height))  glNode:setAnchorPoint(cc.p(0.5, 0.5))  glNode:registerScriptDrawHandler(drawCatmullRomlayer:addChild(glNode,-10glNode:setPosition( size.width / 2, size.height / 2)  ]]--  -- 设置标题  Helper.titleLabel:setString("CatmullRomBy / CatmullRomTo"Helper.subtitleLabel:setString("Catmull Rom spline paths. Testing reverse too"return layerend

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

BezierTo类:贝塞尔曲线动作。


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
02.LuaInterface 和 luanet、Lua和C#交互发布时间:2022-07-22
下一篇:
lua返回table最大值发布时间: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