2013-04-06 64 views
0

我想知道人們通常如何使用盡可能少的硬編碼來保存動畫,以便在Cocos2d中輕鬆加載它們。導出cocos2d的spritesheet

E.G.我想到的解決方案是有一個plist文件,其中包含有關每個幀的信息,第二個plist包含有關每個動畫(動畫的名稱,要播放的幀以及可能的延遲)的信息。

如果這是正確的解決方案,我怎樣才能自動生成spritesheet這樣的plist文件?

回答

0

您可以使用紋理打包工具來創建精靈圖集和相應的plist。 Zwoptex對我來說工作得很好。一旦你有你PNG和plist中,您可以用 SpriteFrameCache

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"gameSprites.plist"];

而且加載它們,你可以使用一個命名約定您的動畫幀,例如用「_index」後面添加他們:animFrame_1animFrame_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]; 
} 

希望它有幫助。

+0

我在哪裏可以獲得某些動畫的frameCount?當我有很多動畫時,我認爲對它進行硬編碼效率不高。從.plist中讀取信息會更好。 可以例如Zwoptex存儲某些有關某些動畫的framecount的信息?可能會產生二手plist,或者解決方案是什麼? – Terko 2013-04-07 07:19:57

+0

你是對的,但可悲的是Zwoptex不會讓你添加這種元數據,我通常有一組常量/枚舉來保留我的動畫frameCounts。 LevelHelper具有對動畫信息的更多控制,但如果您只需要它來管理動畫幀數,它可能不值得。在這種情況下,編寫自己的plist映射動畫名稱幀數會更快。 – ssantos 2013-04-07 08:37:30

+0

好吧,無論如何,謝謝你! – Terko 2013-04-07 10:43:15