天天看點

cocos2dx 運動+旋轉動畫 CCSequence CCAnimation CCAnimate CCMoveTo CCCallFuncN

cocos2dx 動畫是個非常奇妙的東西~~。 這裡看到的是一個物體,在運動的過程中會不斷地翻轉的過程。

   兩個動畫一起來~~

以下的代碼中涉及到:CCAnimation(補間動畫 )  CCAnimate(動畫)  CCDelayTime(延遲動作)  CCFadeTo(設定透明态度) CCSequence(動作序列)  CCSpawn(讓精靈的若幹個動畫同一時候運作)  CCRepeateForever(無限循環)  CCCallFuncN(瞬時動作中  node回調函數)  CCMoveTo (移動動作)

這裡是用lua來寫的,不是用c++寫的。  lua來寫這個真的是非常好。非常友善。

不多說,直接看代碼。當中這些類的使用方法網上一搜一大把。

local winSize = CCDirector:shareDirector():getWinSize()

local layer = CCLayerColor:create(ccc4(0, 0, 0, 111), winSize.winSize, winSize.height)

--載入運動過程中的動畫   使用檔案載入  texturepacker

--這樣的載入方式網上一大把,不知道原理的自行google

local cache = CCSpriteFrameCache:sharedSpriteFrameCache():addSpriteFramesWithFile("plist檔案")

local array = CCArray:create()

for i = 1, n do   --這裡n是幀的數量

local path = string.format("%d.png", i)

local name = CCSpriteFrameCache:sharedSpriteFrameCache():spriteFrameByName(path)

array:addObject(name)

end

local animation = CCAnimation:createWithSpriteFrames(array)

--也能夠用table來設計幾個動

--[[

local info =

{

{ pointx = 1, pointy = 2},

{ pointx = 1, pointy = 2}

}

local j = 0

for j = 1, #info do

local info1 = info[j]

info1.pointx

]]

--運動動畫

for j = 1, 10 do   --幾個在動

--剛剛設定的幀動畫

animation:setDelayPerUnit((math.random(5, 10)) / 70)

animation:setRestoreOriginalFrame(true)

local animate = CCAnimate:create(animation)

animate:setTag(0)

local sprite = CCSprite:create("圖檔檔案, 這裡是跟plist檔案名稱一樣的名字喲")

local offset = j * math.random(-1, 1)         --這裡-1。 1 就是中間切割  向兩側産生

sprite:setPosition(ccp(x + offset, y))   -- 這裡的x, y 你自定義

sprite:setScale(1.2)

layer:addChile(sprite)

local arraymove = CCArray:create()

arraymove:addObject(CCDelayTime:create(j * 0.1))  --依據須要自己設定延時

local moveto = CCMoveTo:create(0.8, ccp(x + offset, y))   --跟上面的對照 x, y自己設定

local arrayFade = CCArray:create()

local delayFade = CCDelayTime:create(0.8)

local fade = CCFadeTo:create(0.05, 0)  --0.05秒内。 變為不透明

arrayFade:addObject(delayFade)

arrayFade:addObject(fade)

local actionFade = CCSequence:create(arrayFade)

local spawn = CCSpawn:createWithTwoActions(moveto, actionFade)  --讓精靈的若幹個動畫同一時候運作

arraymove:addObject(spawn)

local action = CCSequence:create(arraymove)

sprite:runAction(CCRepeateForever:create(animate))

sprite:runAction(action)

--延遲銷毀動作

local scene = CCDirector:sharedDirector():getRunningScene()

scene:addChile(layer, 100)

local arrayend = CCArray:create()

arrayend:addObject(CCDelayTime:create(2))   --延遲時間

arrayend:addObject(CCFadeTo:create(0.1, 0))

arrayend:addObject(CCCallFuncN:create(removeLayer))  --這裡removeLayer是一個函數

local endAction = CCSequence:create(arrayend)

layer:runAction(endAction)

function removeLayer(n)

n = tolua.cast(n, "CCNode")

n:removeFromParentAndCleanup(true)

本文轉自mfrbuaa部落格園部落格,原文連結:http://www.cnblogs.com/mfrbuaa/p/5353690.html,如需轉載請自行聯系原作者 

繼續閱讀