我正在开发一款游戏,并且我给了用户一些机会来发射大炮。火动画被缓存,但它具有25px的宽度,并且火有时会达到150px。我现在正在创建4x6 = 24个CCSprites,并且每个运行24个动画(缓存帧),每个10帧(缓存帧)...问题在于它变得非常缓慢,火焰动画不会同时开始/结束,游戏中的其他动画变得越来越慢......你明白了......有什么想法可以改进它?谢谢你们!cocos2d CCSprite +动画重复?
这是代码:
NSMutableArray *sprites = [[NSMutableArray alloc] init];
NSMutableArray *anims = [[NSMutableArray alloc] init];
int spr = 0;
for(int i=0; i< [cannons count]; i++) {
CCSprite *cannon = [cannons objectAtIndex:i];
for(int j=1; j<=cannonRange; j++) {
[sprites addObject:[[CCSprite alloc]init]];
NSString *anim = @"cannon/fire";
if(j == cannonRange)
anim = @"cannon/fire_end";
[anims addObject:[[Animation findAnimation:anim] getAnimation]];
float x=cannon.position.x, y=cannon.position.y+25*j;
((CCSprite *)[sprites objectAtIndex:spr]).position = ccp(x,y);
[layer addChild:((CCSprite *)[sprites objectAtIndex:spr]) z:50];
spr++;
}
}
for(int k=0; k<[sprites count]; k++){
[[sprites objectAtIndex:k] runAction:[anims objectAtIndex:k]];
}
(对不起,我忘了这个解释[anims ADDOBJECT:[动画findAnimation:动画] getAnimation];)
-(CCAnimate *) getAnimation {
NSMutableArray *animFrames = [[NSMutableArray alloc]init];
for(int i = 1; i < size; ++i)
[animFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[self fileName:i]]];
CCAnimation *animation = [[CCAnimation alloc] initWithFrames:animFrames delay:[self getDelay]];
CCAnimate *animate = [[CCAnimate alloc] initWithAnimation:animation restoreOriginalFrame:NO];
return animate;
}
谢谢,我已经读了几个星期前,我还可以” t同时找到这个数量的动画的解决方案 – Agustin 2012-04-13 21:13:49
嗯..你看过多少内存你的spritesheets正在使用和使用不同/更小的图像格式? (例如不是32位)http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:textures – MechEthan 2012-04-13 21:42:28