我想知道人們通常如何使用盡可能少的硬編碼來保存動畫,以便在Cocos2d中輕鬆加載它們。導出cocos2d的spritesheet
E.G.我想到的解決方案是有一個plist文件,其中包含有關每個幀的信息,第二個plist包含有關每個動畫(動畫的名稱,要播放的幀以及可能的延遲)的信息。
如果這是正確的解決方案,我怎樣才能自動生成spritesheet這樣的plist文件?
我想知道人們通常如何使用盡可能少的硬編碼來保存動畫,以便在Cocos2d中輕鬆加載它們。導出cocos2d的spritesheet
E.G.我想到的解決方案是有一個plist文件,其中包含有關每個幀的信息,第二個plist包含有關每個動畫(動畫的名稱,要播放的幀以及可能的延遲)的信息。
如果這是正確的解決方案,我怎樣才能自動生成spritesheet這樣的plist文件?
您可以使用紋理打包工具來創建精靈圖集和相應的plist。 Zwoptex
對我來說工作得很好。一旦你有你PNG和plist中,您可以用 SpriteFrameCache
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"gameSprites.plist"];
而且加載它們,你可以使用一個命名約定您的動畫幀,例如用「_index」後面添加他們:animFrame_1
,animFrame_2
,等等......
然後你可以有一個CCAnimation類別的助手來加載給定動畫名稱和幀數的動畫。你可以把下面的代碼作爲例子.-
+ (CCAnimation *) animationWithFrame:(NSString *) frame frameCount:(int) frameCount startIndex:(int) startIndex delay:(float) delay separator:(NSString *) separator {
// load the ship's animation frames as textures and create a sprite frame
NSMutableArray* frames = [NSMutableArray arrayWithCapacity:frameCount];
CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
int end = frameCount + startIndex;
for (int i = startIndex; i < end; i++)
{
NSString* file = [NSString stringWithFormat:@"%@%@%i.png", frame, separator, i];
CCSpriteFrame* frame = [frameCache spriteFrameByName:file];
[frames addObject:frame];
}
// Return an animation object from all the sprite animation frames
return [CCAnimation animationWithFrames:frames delay:delay];
}
希望它有幫助。
我在哪裏可以獲得某些動畫的frameCount?當我有很多動畫時,我認爲對它進行硬編碼效率不高。從.plist中讀取信息會更好。 可以例如Zwoptex存儲某些有關某些動畫的framecount的信息?可能會產生二手plist,或者解決方案是什麼? – Terko 2013-04-07 07:19:57
你是對的,但可悲的是Zwoptex不會讓你添加這種元數據,我通常有一組常量/枚舉來保留我的動畫frameCounts。 LevelHelper具有對動畫信息的更多控制,但如果您只需要它來管理動畫幀數,它可能不值得。在這種情況下,編寫自己的plist映射動畫名稱幀數會更快。 – ssantos 2013-04-07 08:37:30
好吧,無論如何,謝謝你! – Terko 2013-04-07 10:43:15