1. 程式人生 > >cocos2d+lua實現幀動畫播放

cocos2d+lua實現幀動畫播放

使用Cocos2d播放幀動畫的方法有兩種:

先來介紹一下流程:
1.得到動畫的每一幀的陣列FrameArray

2.將幀動畫陣列包裝成Animation物件

3.將Animation物件轉化為可以播放的Action物件

4.使用Sprite來播放Action

第一種:使用TexturePicture來壓縮圖,用CCSpriteFrameCache來載入

--建立一個Cache來載入解壓出的圖片
local frameCache = CCSpriteFrameCache:create()
frameCache:addSpriteFrameWithFile("abc.plist","abc.png")
local frameArr = CCArray:createWithCapacity(圖片總數)
--建立一個數組來粗放得到的幀
for j=0,圖片總數減一 do
local framePath = string.format("abc.%5dpng",j)
--將每個幀圖片轉換成幀Frame
local frame = frameCache:spriteFrameByName(framePath)
frameArr.addObject(frame)
end

--array 中已經有了Frame了,下來需要將其生成為Animation物件
local animation = CCAnimation:createWithSpriteFrames(frameArr)
--有了animation後下來要將其變為可執行的Action
local action = CCSequence:createWithTwoActions(CCAnimate:create(animation),CCCallFunc:create(function() callBack end))
--有了Action下來需要在螢幕上播放它,因此需要一個載體來給它提供一個塊螢幕上的位置來播放,我們這裡就用一個空白的Sprite來搞定
local animSprite = CreateBlankCCSprite()
animSprirte:setPosition(x,y)
--一切就緒,開始播放,因為播放的是一個Sequence動畫所以,會先播放第一個完成後會執行回撥函式
animSprite:runAction(action)

--上述的action為一個動畫組合,它會順序執行執行完動畫後會去執行回撥函式

第二種:分別載入每一幀的圖片來生成幀動畫

--定義幀陣列
local frameArr = CCArray:createWithCapacity(幀的個數)
--將每一幀的圖片加入
for j=0,圖片個數-1 do
local framePath = string.format("abc_%d.png",j)
local frame = CCSpriteFrameCache:sharedSpriteFrameCache():spriteFrameByName(framePath) 
end
--好,通過上述操作得到了frame 陣列了,下來得到Animation
local animation = CCAnimation:createWithSpriteFrames(frameArr)
--下面同上