我正在创建一个包含大约15种不同动画的应用程序。一些动画是在按钮水龙头上播放的,有些是在某些事件上播放的。由于我是cocos2d的新手,我无法弄清楚如何初始化这些动画。我为每个动画分开精灵表。我所做的是创建一个便捷类,它具有一个CCSprite对象作为数据成员。在init函数中,我已经放置了所有的代码来创建动画。但是一旦调用init函数,我会得到内存警告。初始化精灵多个动画时的内存警告
我甚至试图初始化动画时,只发送播放动画的请求,但我仍然得到内存警告。此外,如果我这样做,动画不会播放,直到整个精灵表被加载。
请检查下面的代码以供参考
- (void)initEntryAnimation
{
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"entry.plist"];
CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"entry.png"];
[self.sardarSprite addChild:spriteSheet];
NSMutableArray *entryFrames = [NSMutableArray array];
for(int i = 0; i < 77; i++) {
if([[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"enter in scene%04i.png", i+1]])
[entryFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"enter in scene%04i.png", i+1]]];
}
self.entryAnimation = [CCAnimation animationWithFrames:entryFrames delay:0.05f];
}
- (void)playEntryAnimation
{
[CCSpriteFrameCache purgeSharedSpriteFrameCache];
[self.sardarSprite runAction:[CCAnimate actionWithAnimation:self.entryAnimation restoreOriginalFrame:NO]];
}
我已经建立了类似的功能,为所有15个动画。我一个接一个地调用所有初始化函数。每当发送动画请求时都会调用播放函数。
我非常需要一些专家意见。任何帮助将不胜感激。
动画的框架有多大? – 2012-03-19 11:58:21
我用于创建精灵表的图像是320 * 480,这是否重要,因为我将它们放入精灵表中占据了所有透明区域。 – Hammad 2012-03-20 09:45:46
将它们放在精灵表中只会减少磁盘上的存储空间,然后减少精灵的内存使用量。你的精灵表有多大,你有多少?除非320x480上只有非常小的图像和很多透明空间,否则您仍然会使用大量内存。 – 2012-03-20 10:03:34