生活随笔
收集整理的這篇文章主要介紹了
cocos2d的常用动作及效果总结之五:Animation
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這一篇是講一下如何在cocos2d中實現動畫。
實現動畫的步驟:
加載幀生成動畫對象運行動畫
加載幀我用過兩種方式:
第一種是使用.plist文件,通過CCSpriteFrameCache讀取動畫幀,并加載到CCAnimation對象中,如下: [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"animate.plist"];NSMutableArray *walkAnimFrames = [NSMutableArray array];
for(int i = 1; i <= 8; ++i) {[walkAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"bear%d.png", i]]];
}
CCAnimation *walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.1f]; id actions =?[?CCRepeatForeveractionWithAction: [CCAnimateactionWithAnimation:walkAnim restoreOriginalFrame:NO] ];
[sprite runAction:actions]; ?這里面的 .plist 是什么呢?
我們知道動畫實際上就是由一幀幀的圖片連續播放產生的,那么我們在cocos2d中實現動畫時,首先要把所有的動畫幀加載到內存中,但一張一張的加載比較費時費事,所有,就會有工具把所有的圖片 揉成一個圖片,橫七豎八的放到一個圖片文件中,為了再把這些圖片分離出來,就需要一個數據文件記載每一個圖片的位置及其大小,這個文件就是上面提到的 .plist 文件。
下圖左邊就是圖片文件,而右側的是 .plist 文件的內容。 .plist 文件可以通過Zwoptex 或 TexturePacker程序生成,?Zwoptex的flash版本是免費的,桌面版是收費的,TexturePacker初級版是免費的,高級版是收費的。
?如果你不想花錢買上面這兩個軟件,有什么辦法不用 .plist 文件的形式加載動畫嗎?答案是有,目前我就是不用 .plist 的形式加載動畫的,下面先給出代碼: CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:fileName];
NSMutableArray *animFrames = [NSMutableArray array];
[animFrames removeAllObjects];for (int i=0; i<frameCount; i++) {CCSpriteFrame *frame = [CCSpriteFrame frameWithTexture:texture rect:CGRectMake(spriteWidth*i,0, spriteWidth,spriteHeight)];[animFrames addObject:frame];
}
CCAnimation *animation =[CCAnimation animationWithFrames:animFrames delay:delay];id actions = [ CCRepeatForever actionWithAction: [CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO] ];
[sprite runAction:actions];
這種方法的不同主要在于,加載幀時,使用的是 ?CCSpriteFrame frameWithTexture:(CCTexture2D*)texture rect:(CGRect)rect ,也就是,直接加載圖片,然后使用 CGRect 來指定加載圖片的位置。
比如,上面的代碼中表示的就是動畫圖片是按照水平排列的,每個動畫幀的寬是 spriteWidth, 高是 spriteHeight,然后,通過水平移動坐標,來一個一個的加載圖片。兩種方式,區別僅僅在于如何加載動畫幀,其他的步驟是一樣的。
下面說一下如何改變精靈的圖片。當你的操縱的精靈,吃了什么東東,然后變身了,那么顯示在屏幕上的圖片就要變化,那么如何設定呢?
CCSpriteFrame *frame = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@"grossini_dance_02.png"];
[sprite1 setDisplayFrame:frame]; 這種方法適用于適用 .plist的方式加載幀的方式,因為每一個幀都有自己的名字,所以很容易通過名字取得指定的幀。 [self setTextureRect:CGRectMake(80, 0, 40, 40)];
這種方式適用于我第二種加載動畫的方式,這種方式沒有像.plist那種方式那樣指定了每個幀的名字,所以,可以通過直接指定 位置的方式來替換 精靈的圖片。 [self setTexture:(CCTexture2D *) texture]; 這種的話,直接適用 CCTexture2D對象來替換。關于他們有什么不同,有人說 setDisplayFrame 不會改變精靈的大小,替換幀后,會調整顯示比例是精靈的大小不改變,而setTexture會改變精靈的大小。
總結
以上是生活随笔為你收集整理的cocos2d的常用动作及效果总结之五:Animation的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。