轉載--http://blog.csdn.net/u013479068/article/details/50434451
注:筆者不把一大段代碼貼出來,分段解釋比較舒服一點
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 layer
- end
ScaleTo:縮放動作
ScaleBy: 縮放動作,繼承自ScaleTo,提供reverse方法
- --------------------------------------
- -- ActionScale
- -- 動作縮放
- --------------------------------------
- local function ActionScale()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- centerSprites(3)
- -- ScaleTo,第一個參數是縮放時間,第二個參數爲縮放因子
- local actionTo = cc.ScaleTo:create(2.0, 0.5)
- -- ScaleBy, 第一個參數爲縮放時間,第二、三個參數爲縮放因子
- local actionBy = cc.ScaleBy:create(2.0, 1.0, 10.0)
- local 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 layer
- end
RotateBy類/RotateTo:旋轉一個節點
- --------------------------------------
- -- ActionRotate
- -- 動作旋轉
- --------------------------------------
- local function ActionRotate()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- centerSprites(3)
- -- RotateTo,第一個參數爲持續時間,第二個參數爲旋轉角度
- local actionTo = cc.RotateTo:create( 2, 45)
- local actionTo2 = cc.RotateTo:create( 2, -45)
- local actionTo0 = cc.RotateTo:create(2 , 0)
- -- 執行動作序列,先選擇45度之後,
- tamara:runAction(cc.Sequence:create(actionTo, actionTo0))
- -- RotateBy,持續時間爲2秒,旋轉360度
- local actionBy = cc.RotateBy:create(2 , 360)
- local actionByBack = actionBy:reverse() -- 相反操作
- grossini:runAction(cc.Sequence:create(actionBy, actionByBack))
- local action0Retain = cc.RotateTo:create(2 , 0)
- kathia:runAction(cc.Sequence:create(actionTo2, action0Retain))
- Helper.subtitleLabel:setString("RotateTo / RotateBy")
- return layer
- end
SkewTo:通過修改節點對象的skewX和skewY屬性來使節點對象傾斜到一個給定的角度。
SkewBy:通過skewX和skewY的度數來使節點對象傾斜。
- --------------------------------------
- -- ActionSkew
- -- 斜歪動作
- --------------------------------------
- local function ActionSkew()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- centerSprites(3)
- -- SkewTo,第一個參數是持續時間,第二個參數是X軸傾斜的角度,第三個是Y軸的傾斜角度
- local actionTo = cc.SkewTo:create(2, 37.2, -37.2)
- local actionToBack = cc.SkewTo:create(2, 0, 0)-- 返回的一個動作
- local actionBy = cc.SkewBy:create(2, 0.0, -90.0)
- local actionBy2 = cc.SkewBy:create(2, 45.0, 45.0)
- local 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 layer
- end
- --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)當你擺放這個節點的時候。
- -- 這是一個內部方法,僅僅被Layer和Scene使用。不要在框架外調用。 默認值是false,但是在Layer和Scene中是true.
- box: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, actionToBack2)
- box:runAction(seq);
- Helper.subtitleLabel:setString("Skew Comparison")
- return layer;
- end
- --------------------------------------
- -- ActionSkewRotate
- -- 歪斜+旋轉+縮放
- --------------------------------------
- local function ActionSkewRotate()
- -- 創建層
- local layer = cc.Layer:create()
- initWithLayer(layer)
- -- 從父節點移除子節點
- tamara:removeFromParent(true)
- grossini:removeFromParent(true)
- kathia: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(uL)
- uL:setContentSize(cc.size(markrside, markrside))
- uL:setPosition(0, boxSize.height - markrside)
- uL:setAnchorPoint(cc.p(0, 0))
- local uR = cc.LayerColor:create(cc.c4b(0, 0, 255, 255))
- box:addChild(uR)
- uR:setContentSize(cc.size(markrside, markrside))
- uR:setPosition(boxSize.width - markrside, boxSize.height - markrside)
- uR:setAnchorPoint(cc.p(0, 0))
- layer:addChild(box)
- -- 三個動作SkewTo、RotateTo、ScaleTo
- local actionTo = cc.SkewTo:create(2, 0, 2)
- local rotateTo = cc.RotateTo:create(2, 61.0)
- local actionScaleTo = cc.ScaleTo:create(2, -0.44, 0.47)
- local actionScaleToBack = cc.ScaleTo:create(2, 1.0, 1.0)
- local rotateToBack = cc.RotateTo:create(2, 0)
- local 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 layer
- end
JumpTo類:模仿跳躍的軌跡移動節點
JumpBy類:模仿跳躍的軌跡移動節點.提供reverse方法
- --------------------------------------
- -- ActionJump
- -- 跳的動作
- --------------------------------------
- local function ActionJump()
- -- 創建層
- local layer = cc.Layer:create()
- initWithLayer(layer)
- centerSprites(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 layer
- end
CardinalSplineBy類:基礎曲線路徑
- --------------------------------------
- -- ActionCardinalSpline
- -- 曲線運動
- --------------------------------------
- local function ActionCardinalSpline()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- centerSprites(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, 0)
- cc.DrawPrimitives.drawCardinalSpline(array, 0, 100)
- kmGLPopMatrix()
- 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 layer
- end
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, 0)
- cc.DrawPrimitives.drawCatmullRom(array, 50)
- kmGLPopMatrix()
- cc.DrawPrimitives.drawCatmullRom(array2,50)
- end
- 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(drawCatmullRom)
- layer:addChild(glNode,-10)
- glNode:setPosition( size.width / 2, size.height / 2)
- ]]--
- -- 設置標題
- Helper.titleLabel:setString("CatmullRomBy / CatmullRomTo")
- Helper.subtitleLabel:setString("Catmull Rom spline paths. Testing reverse too")
- return layer
- end
BezierBy類:貝塞爾曲線動作。提供reverse方法,用於執行相反操作
BezierTo類:貝塞爾曲線動作。
- --------------------------------------
- -- ActionBezier
- -- 貝塞爾曲線運動
- --------------------------------------
- local function ActionBezier()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- centerSprites(3)
- -- sprite 1
- --[[
- local bezier = ccBezierConfig()
- bezier.controlPoint_1 = cc.p(0, size.height / 2)
- bezier.controlPoint_2 = cc.p(300, - size.height / 2)
- bezier.endPosition = cc.p(300, 100)
- ]]--
- -- 貝塞爾曲線配置結構
- local bezier = {
- cc.p(0, size.height / 2),
- cc.p(300, - size.height / 2),
- cc.p(300, 100),
- }
- -- 以持續時間和貝塞爾曲線的配置結構體爲參數創建動作
- local bezierForward = cc.BezierBy:create(3, bezier)
- local bezierBack = bezierForward:reverse()
- -- 無限循環執行序列
- local rep = cc.RepeatForever:create(cc.Sequence:create(bezierForward, bezierBack))
- -- sprite 2
- tamara:setPosition(cc.p(80,160))
- --[[
- local bezier2 = ccBezierConfig()
- bezier2.controlPoint_1 = cc.p(100, size.height / 2)
- bezier2.controlPoint_2 = cc.p(200, - size.height / 2)
- bezier2.endPosition = cc.p(240, 160)
- ]]--
- local bezier2 ={
- cc.p(100, size.height / 2),
- cc.p(200, - size.height / 2),
- cc.p(240, 160)
- }
- -- 創建貝塞爾曲線動作,第一個參數爲持續時間,第二個參數爲貝塞爾曲線結構
- local bezierTo1 = cc.BezierTo:create(2, bezier2)
- -- sprite 3
- kathia:setPosition(cc.p(400,160))
- local bezierTo2 = cc.BezierTo:create(2, bezier2)
- -- 運行動作
- grossini:runAction(rep)
- tamara:runAction(bezierTo1)
- kathia:runAction(bezierTo2)
- Helper.subtitleLabel:setString("BezierTo / BezierBy")
- return layer
- end
Blink類:閃爍動作
- --------------------------------------
- -- ActionBlink
- -- 閃爍運動
- --------------------------------------
- local function ActionBlink()
- -- 創建層
- local layer = cc.Layer:create()
- -- 初始化層
- initWithLayer(layer)
- centerSprites(2)
- -- 創建兩個閃爍動作,第一個參數爲持續時間,第二個參數爲閃爍次數
- local action1 = cc.Blink:create(2, 10)
- local action2 = cc.Blink:create(2, 5)
- -- 兩個精靈執行動作
- tamara:runAction(action1)
- kathia:runAction(action2)
- Helper.subtitleLabel:setString("Blink")
- return layer
- end
FadeTo類:漸變動作
FadeIn類:漸變動作 "reverse"動作是FadeOut
FadeOut類:漸變動作
"reverse"動作是FadeIn
- --------------------------------------
- -- ActionFade
- -- 漸變動作
- --------------------------------------
- local function ActionFade()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- centerSprites(2)
- -- 設置透明度
- tamara:setOpacity(0)
- -- 創建淡進的動作
- local action1 = cc.FadeIn:create(1)
- -- reverse動作,FadeOut
- local action1Back = action1:reverse()
- -- 創建淡出的動作
- local action2 = cc.FadeOut:create(1)
- -- reverse動作,FadeIn動作
- local action2Back = action2:reverse()
- -- 執行動作
- tamara:runAction(cc.Sequence:create( action1, action1Back))
- kathia:runAction(cc.Sequence:create( action2, action2Back))
- Helper.subtitleLabel:setString("FadeIn / FadeOut")
- return layer
- end
TintTo類:節點變色動作
TintBy類:節點變色動作,提供reverse方法。
- --------------------------------------
- -- ActionTint
- -- 變色動作
- --------------------------------------
- local function ActionTint()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- centerSprites(2)
- -- 用持續時間和顏色創建動作,第一個參數爲持續時間,後面三個爲顏色值
- local action1 = cc.TintTo:create(2, 255, 0, 255)
- local action2 = cc.TintBy:create(2, -127, -255, -127)
- local action2Back = action2:reverse()
- tamara:runAction(action1)
- kathia:runAction(cc.Sequence:create(action2, action2Back))
- Helper.subtitleLabel:setString("TintTo / TintBy")
- return layer
- end
Animation類:一個用來在精靈對象上表現動畫的動畫對象.
AnimationCache類:動畫緩存單例類。
如何你想要保存動畫,你需要使用這個緩存
Animate類:創建序列幀動畫
- --------------------------------------
- -- ActionAnimate
- -- 動畫動作
- --------------------------------------
- local function ActionAnimate()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- centerSprites(3)
- -- 創建動畫
- local animation = cc.Animation:create()
- local number, name
- for i = 1, 14 do
- if i < 10 then
- number = "0"..i
- else
- number = i
- end
- name = "Images/grossini_dance_"..number..".png"
- -- 用圖片名稱加一個精靈幀到動畫中
- 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類:順序執行動作
- --------------------------------------
- -- ActionSequence
- -- 動作序列
- --------------------------------------
- local function ActionSequence()
- -- 創建層
- local layer = cc.Layer:create()
- initWithLayer(layer)
- alignSpritesLeft(1)
- -- 創建動作序列,第一個動作是MoveBy,第二個動作是RotateBy
- local action = cc.Sequence:create(
- cc.MoveBy:create(2, cc.p(240,0)),
- cc.RotateBy:create(2, 540))
- -- 執行動作
- grossini:runAction(action)
- Helper.subtitleLabel:setString("Sequence: Move + Rotate")
- return layer
- end
- --------------------------------------
- -- ActionSequence2
- -- 動作序列2
- --------------------------------------
- local actionSequenceLayer = nil
- -- 動作序列回調1
- local function ActionSequenceCallback1()
- -- 創建標籤
- local label = cc.Label:createWithTTF("callback 1 called", s_markerFeltFontPath, 16)
- label:setAnchorPoint(cc.p(0.5, 0.5))-- 設置錨點
- label:setPosition(size.width / 4, size.height / 2)-- 設置顯示位置
- -- 添加節點到層中
- actionSequenceLayer:addChild(label)
- end
- -- 動作序列回調2
- local function ActionSequenceCallback2(sender)
- -- 創建標籤
- local label = cc.Label:createWithTTF("callback 2 called", s_markerFeltFontPath, 16)
- label:setAnchorPoint(cc.p(0.5, 0.5))-- 設置錨點
- label:setPosition(cc.p(size.width / 4 * 2, size.height / 2))-- 設置顯示位置
- -- 添加節點到層中
- actionSequenceLayer:addChild(label)
- end
- -- 動作序列回調3
- local function ActionSequenceCallback3(sender)
- -- 創建標籤
- local label = cc.Label:createWithTTF("callback 3 called", s_markerFeltFontPath, 16)
- label:setAnchorPoint(cc.p(0.5, 0.5))-- 設置錨點
- label:setPosition(cc.p(size.width / 4 * 3, size.height / 2))-- 設置顯示位置
- actionSequenceLayer:addChild(label)
- end
- local function ActionSequence2()
- -- 創建層
- actionSequenceLayer = cc.Layer:create()
- initWithLayer(actionSequenceLayer)
- alignSpritesLeft(1)
- grossini:setVisible(false)-- 設置節點不可見
- -- 創建一個順序執行的動作,分別爲Place:放置節點到某個位置,Show:顯示節點;MoveBy:移動到(100,0)的位置;CallFunc:調用回調方法
- 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))
- grossini:runAction(action)
- Helper.subtitleLabel:setString("Sequence of InstantActions")
- return actionSequenceLayer
- end
Spawn類:並行動作
- --------------------------------------
- -- ActionSpawn
- -- 同時執行一批動作
- --------------------------------------
- local function ActionSpawn()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- alignSpritesLeft(1)
- -- 創建一個並行動作,第一個動作爲JumpBy,第二個動作爲RotateBy
- local action = cc.Spawn:create(
- cc.JumpBy:create(2, cc.p(300,0), 50, 4),
- cc.RotateBy:create( 2, 720))
- -- 執行動作
- grossini:runAction(action)
- Helper.subtitleLabel:setString("Spawn: Jump + Rotate")
- return layer
- end
Cocos2d-x 中相關動作提供reverse方法,用於執行Action的相反動作,一般以XXXBy這類的,都具有reverse方法
- --------------------------------------
- -- ActionReverse
- -- Action的相反動作
- --------------------------------------
- local function ActionReverse()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- alignSpritesLeft(1)
- -- 創建JumpBy動作
- local jump = cc.JumpBy:create(2, cc.p(300,0), 50, 4)
- -- 動作序列,第一個動作爲跳躍的動作,第二個是跳的反操作
- local action = cc.Sequence:create(jump, jump:reverse())
- grossini:runAction(action)
- Helper.subtitleLabel:setString("Reverse an action")
- return layer
- end
DelayTime類:延時動作
- --------------------------------------
- -- ActionDelaytime
- -- 延遲動作
- --------------------------------------
- local function ActionDelaytime()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- alignSpritesLeft(1)
- -- 創建移動動作,移動到(150,0)位置
- local move = cc.MoveBy:create(1, cc.p(150,0))
- -- 第一個動作move,然後延遲2秒,再繼續移動
- local action = cc.Sequence:create(move, cc.DelayTime:create(2), move)
- grossini:runAction(action)
- Helper.subtitleLabel:setString("DelayTime: m + delay + m")
- return layer
- end
Repeat類:重複執行動作很多次。次數由參數決定。
要無線循環動作,使用RepeatForever。
RepeatForever類:無線循環一個動作。
如果要循環有限次數,請使用Repeat動作。
- --------------------------------------
- -- ActionRepeat
- -- 重複動作
- --------------------------------------
- local function ActionRepeat()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- alignSpritesLeft(2)
- -- 創建MoveBy動作,移動到(150,0)的位置
- local a1 = cc.MoveBy:create(1, cc.p(150,0))
- -- 創建重複執行的動作序列,這裏重複3次
- local action1 = cc.Repeat:create(cc.Sequence:create(cc.Place:create(cc.p(60,60)), a1), 3)
- -- 創建MoveBy動作,移動到(150,0)的位置
- local a2 = cc.MoveBy:create(1, cc.p(150,0))
- -- 創建重複執行的動作序列,這裏無限重複執行
- local action2 = cc.RepeatForever:create(cc.Sequence:create(a2, a1:reverse()))
- -- 兩個精靈分別執行動作
- kathia:runAction(action1)
- tamara:runAction(action2)
- Helper.subtitleLabel:setString("Repeat / RepeatForever actions")
- return layer
- end
- --------------------------------------
- -- ActionRepeatForever
- -- 無限重複的動作
- --------------------------------------
- local function repeatForever(sender)
- local repeatAction = cc.RepeatForever:create(cc.RotateBy:create(1.0, 360))
- sender:runAction(repeatAction)
- end
- local function ActionRepeatForever()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- centerSprites(1)
- -- 創建一個動作序列,第一個動作先延時1秒,第二個動作調用無限重複的方法
- local action = cc.Sequence:create(
- cc.DelayTime:create(1),
- cc.CallFunc:create(repeatForever) )
- grossini:runAction(action)
- Helper.subtitleLabel:setString("CallFuncN + RepeatForever")
- return layer
- end
- --------------------------------------
- -- ActionRotateToRepeat
- -- 重複執行旋轉的動作
- --------------------------------------
- local function ActionRotateToRepeat()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- centerSprites(2)
- -- 創建兩個旋轉的動作
- local act1 = cc.RotateTo:create(1, 90)
- local act2 = cc.RotateTo:create(1, 0)
- -- 創建動作序列
- local seq = cc.Sequence:create(act1, act2)
- -- 一個無限重複的動作,一個重複10次的動作
- local rep1 = cc.RepeatForever:create(seq)
- local rep2 = cc.Repeat:create(seq:clone(), 10)
- tamara:runAction(rep1)
- kathia:runAction(rep2)
- Helper.subtitleLabel:setString("Repeat/RepeatForever + RotateTo")
- return layer
- end
CallFunc類:調用一個 'callback' 函數
- --------------------------------------
- -- ActionCallFunc
- -- 調用方法
- --------------------------------------
- local callFuncLayer = nil
- -- 調用方法回調函數1
- local function CallFucnCallback1()
- local label = cc.Label:createWithTTF("callback 1 called", s_markerFeltFontPath, 16)
- label:setAnchorPoint(cc.p(0.5, 0.5))
- label:setPosition(size.width / 4, size.height / 2)
- callFuncLayer:addChild(label)
- end
- -- 調用方法回調函數2
- local function CallFucnCallback2(sender)
- local label = cc.Label:createWithTTF("callback 2 called", s_markerFeltFontPath, 16)
- label:setAnchorPoint(cc.p(0.5, 0.5))
- label:setPosition(size.width / 4 * 2, size.height / 2)
- callFuncLayer:addChild(label)
- end
- -- 調用方法回調函數3
- local function CallFucnCallback3(sender)
- local label = cc.Label:createWithTTF("callback 3 called", s_markerFeltFontPath, 16)
- label:setAnchorPoint(cc.p(0.5, 0.5))
- label:setPosition(size.width / 4 * 3, size.height / 2)
- callFuncLayer:addChild(label)
- end
- -- 調用“Call back"
- local function ActionCallFunc()
- callFuncLayer = cc.Layer:create()
- initWithLayer(callFuncLayer)
- centerSprites(3)
- -- 創建動作序列,第一個動作爲MoveBy,第二個動作爲CallFunc
- local action = cc.Sequence:create(
- cc.MoveBy:create(2, cc.p(200,0)),
- cc.CallFunc:create(CallFucnCallback1) )
- -- 創建動作序列,第一個動作爲ScaleBy,第二個動作爲淡出,第三個動作爲CallFunc
- local action2 = cc.Sequence:create(cc.ScaleBy:create(2, 2),cc.FadeOut:create(2),cc.CallFunc:create(CallFucnCallback2))
- -- 創建動作序列,第一個動作爲RotateBy,第二個動作w爲淡出,第三個動作爲CallFunc
- local action3 = cc.Sequence:create(cc.RotateBy:create(3 , 360),cc.FadeOut:create(2),cc.CallFunc:create(CallFucnCallback3))
- -- 運行動作
- grossini:runAction(action)
- tamara:runAction(action2)
- kathia:runAction(action3)
- Helper.subtitleLabel:setString("Callbacks: CallFunc and friends")
- return callFuncLayer
- end
OrbitCamera類:創建一個帶有起始半徑、半徑差、起始z角、旋轉z角的差、起始x角、旋轉x角的差 這些參數的運動視角動作類
- --------------------------------------
- -- ActionOrbit
- -- OrbitCamera類 :action 視角按照球面座標軌跡 圍繞屏幕中心進行旋轉
- --------------------------------------
- local function ActionOrbit()
- local layer = cc.Layer:create()
- initWithLayer(layer)
- centerSprites(3)
- -- 創建一個帶有起始半徑、半徑差、起始z角、旋轉z角的差、起始x角、旋轉x角的差 這些參數的運動視角動作類
- local orbit1 = cc.OrbitCamera:create(2,1, 0, 0, 180, 0, 0)
- local action1 = cc.Sequence:create(orbit1, orbit1:reverse())
- local orbit2 = cc.OrbitCamera:create(2,1, 0, 0, 180, -45, 0)
- local action2 = cc.Sequence:create(orbit2, orbit2:reverse())
- local orbit3 = cc.OrbitCamera:create(2,1, 0, 0, 180, 90, 0)
- local action3 = cc.Sequence:create(orbit3, orbit3:reverse())
- kathia:runAction(cc.RepeatForever:create(action1))
- tamara:runAction(cc.RepeatForever:create(action2))
- grossini:runAction(cc.RepeatForever:create(action3))
- local move = cc.MoveBy:create(3, cc.p(100,-100))
- local move_back = move:reverse()
- local seq = cc.Sequence:create(move, move_back)
- local rfe = cc.RepeatForever:create(seq)
- kathia:runAction(rfe)
- tamara:runAction(rfe:clone())
- grossini:runAction(rfe:clone())
- Helper.subtitleLabel:setString("OrbitCamera action")
- return layer
- end