私はゲームを開発しており、ユーザーに大砲を発射する機会を与えています。炎のアニメーションはキャッシュされますが、幅が 25px で、炎が 150px になることもあります。
したがって、幅 150px (レベル 6 のような sth) で 4 つの大砲を発射すると、現在 4x6 = 24 の CCSprite をオンザフライで作成し、それぞれ 10 フレーム (キャッシュされたフレーム) の 24 のアニメーションを実行しています... 問題は、それが非常に遅くなる、火のアニメーションが同時に開始/終了しない、ゲーム内の他のアニメーションが遅くなる...アイデアが得られます...これを改善するアイデアはありますか? 皆さん、ありがとうございました!
これはコードです:
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:[[Animation findAnimation:anim] 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;
}