Lua之圖片和動畫各個屬性的詳解

轉載--http://blog.csdn.net/u013479068/article/details/50434451


注:筆者不把一大段代碼貼出來,分段解釋比較舒服一點

MoveBy:通過修改節點對象的位置屬性來改變節點對象的x,y像素。 x,y的座標是相對於這個對象的位置來說的。 幾個MoveBy動作可以同時被調用,最終的運動是這幾個單獨運動的綜合

MoveTo:移動節點對象到位置x,y。x,y是絕對座標,通過修改它的位置屬性來改變它們的值。 幾個MoveTo動作可以被同時調用,並且最終的運動是幾個單獨運動的綜合。


[javascript] view plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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 plaincopy在CODE上查看代碼片派生到我的代碼片
  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  
發佈了37 篇原創文章 · 獲贊 47 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章