我想知道人们通常如何保存动画以便在 Cocos2d 中使用尽可能少的硬代码轻松加载它们。
EG 我想到的解决方案是有一个 plist 文件,其中包含有关每一帧的信息,第二个 plist 文件包含有关每个动画的信息(动画名称、要播放的帧以及可能的延迟)。
如果这是正确的解决方案,我怎样才能为 spritesheet 自动生成这样的 plist 文件?
我想知道人们通常如何保存动画以便在 Cocos2d 中使用尽可能少的硬代码轻松加载它们。
EG 我想到的解决方案是有一个 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];
}
希望能帮助到你。