cocos2dx:動作Actions的使用

目錄

常用動作

移動MoveTo、MoveBy

縮放ScaleTo、ScaleBy

旋轉RotateTo、RotateBy

淡入淡出FadeIn、FadeOut

延時DelayTime

回調CallFunc

重複動作

緩衝動作

序列動作

順序動作Sequence

同時動作Spawn

動作的克隆

動作的倒轉

動作的執行

動作的停止


常用動作

移動MoveTo、MoveBy

MoveTo:
local moveAction = cc.MoveTo:create(1, cc.p(100, 100))  -- 參數1:動作持續的時間(float)  參數2:終點位置

MoveBy:
local moveAction = cc.MoveBy:create(1, cc.p(100, 100))  -- 參數1:動作持續的時間  參數2:以節點當前位置爲(0, 0)進行移動的終點位置

ps:To和By的區別

To:動作開始的狀態(位置、大小、角度等屬性)爲節點的初始狀態(節點最初的狀態)

By:動作開始的狀態爲節點的當前狀態(可能已經進行過移動、縮放、旋轉等操作)

縮放ScaleTo、ScaleBy

ScaleTo:
local scaleAction1 = cc.ScaleTo:create(1, 2)  -- 參數1:動作持續的時間 參數2:縮放的比例(x、y同比縮放)
or
local scaleAction2 = cc.ScaleTo:create(1, 2, 2.5)  -- 參數1:動作持續的時間  參數2:x縮放的比例  參數3:y縮放的比例

ScaleBy:
local scaleAction1 = cc.ScaleBy:create(1, 2)
or
local scaleAction2 = cc.ScaleBy:create(1, 2, 2.5)

旋轉RotateTo、RotateBy

RotateTo:
local rotateAction = cc.RotateTo:create(1, 90)  -- 參數1:動作持續的時間  參數2:旋轉的角度(以z爲軸)

RotateBy:
local rotateAction = cc.RotateBy:create(1, 90)

淡入淡出FadeIn、FadeOut

FadeIn:
local fadeInAction = cc.FadeIn:create(2)  -- 參數:動作持續的時間

FadeOut:
local fadeOutAction = cc.FadeOut:create(2)

ps:設置透明度setOpacity(0),值爲0-255!

local blinkAction = cc.Blink:create(1, 5)  -- 參數1:動作持續的時間  參數2:閃爍的次數

延時DelayTime

local delayTimeAction = cc.DelayTime:create(0.5)  -- 參數:動作持續的時間

回調CallFunc

local callFuncAction = cc.CallFunc:create(function()
    -- TODO
end)  -- 參數:回調函數

重複動作

Repeat:有限次數的重複某個動作
local blinkAction = cc.Blink:create(1, 2)  -- 1s2閃
local repeatAction = cc.Repeat:create(blinkAction, 5)  -- 參數1:有限時間動作  參數2:重複的次數(int)

RepeatForever:無限次數重複某個動作
local blinkAction = cc.Blink:create(1, 1)
local repeatForeverAction = cc.RepeatForever:create(blinkAction)  -- 參數:延時動作

緩衝動作

EaseIn:加速
local moveAction = cc.MoveTo:create(1, cc.p(100, 100))
local easeInAction = cc.EaseIn:create(moveAction, 5)  -- 參數1:延時動作  參數2:緩衝係數

EaseOut:減速
local moveAction = cc.MoveTo:create(1, cc.p(100, 100))
local easeOutAction = cc.EaseOut:create(moveAction, 5)

EaseBackInOut:回震緩衝
local moveAction = cc.MoveTo:create(1, cc.p(100, 100))
local easeBackInOutAction = cc.EaseBackInOut:create(moveAction)  -- 參數:延時動作

ps:緩衝動作的種類很多,具體效果可以查看動作類之緩衝動作和組合動作的使用!

序列動作

順序動作Sequence

一個Sequence可以包含任何數量的動作對象,回調方法和其它序列,順序執行!

local moveAction = cc.MoveTo:create(1, cc.p(100, 100))
local delayTimeAction = cc.DelayTime:create(0.5)
local scaleAction = cc.ScaleTo:create(1, 2)
local callFuncAction = cc.CallFunc:create(function()
    print("Over")
end)
local sequenceAction = cc.Sequence:create(moveAction, delayAction, scaleAction, callFuncAction)

同時動作Spawn

Spawn對象可以添加任意數量的動作和其它Spawn對象,同時執行所有的動作!

local moveAction = cc.MoveTo:create(1, cc.p(100, 100))
local scaleAction = cc.ScaleTo:create(1, 2)
local rotateAction = cc.RotateTo:create(2, 90)  -- 放入Spawn中的動作持續的時間可以不一致
local spawnAction = cc.Spawn:create(moveAction, scaleAction, rotateAction)

動作的克隆

克隆(Clone)的功能和字面含義一樣,如果你對一個Action對象使用了clone()方法,你就獲得了這個Action對象的拷貝。

爲什麼要使用clone()方法? 因爲當Action對象運行時會產生一個內部狀態,記錄着節點屬性的改變。當你想將一個創建的動作,重複使用到不同的節點對象時,如果不用clone()方法,就無法確定這個動作的屬性到底是怎樣的(因爲被使用過,產生了內部狀態),這會造成難以預料的結果。

local moveAction = cc.MoveTo:create(1, cc.p(100, 100))
local moveAction_clone = moveAction:clone()

動作的倒轉

倒轉(Reverse)的功能也和字面意思一樣,調用reverse()可以讓一系列動作按相反的方向執行。reverse()不是隻能簡單的讓一個Action對象反向執行,還能讓Sequence和Spawn倒轉。

local moveAction = cc.MoveBy:create(1, cc.p(100, 100))
node:runAction(moveAction:reverse())

動作的執行

runAction():執行一個動作或動作序列

local moveAction = cc.MoveTo:create(1, cc.p(100, 100))
node:runAction(moveAction)

動作的停止

stopAllActions():停止目標節點的所有動作

node:stopAllActions()

stopActionByTag():停止目標節點的指定動作

local moveAction = cc.MoveBy:create(10, cc.p(100, 100))
moveAction:setTag(1)
local scaleAction = cc.ScaleTo:create(10, 2)
scaleAction:setTag(2)
local delayTimeAction = cc.DelayTime:create(5)
local callFuncAction = cc.CallFunc:create(function()
    node:stopActionByTag(1)
end)
local sequenceAction = cc.Sequence:create(delayTimeAction, callFuncAction)
node:runAction(moveAction)
node:runAction(scaleAction)
node:runAction(sequenceAction)

ps:關於動作官網最新的文檔API

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章