私のコードの小惑星が船に向かって来て、レーザーが小惑星に当たった場合の爆発アニメーションを実装したいと思います。小惑星は爆発アニメーションを実行し、非表示モードに切り替える必要があります。
ターゲットが命中したときのアニメーションがない場合、ターゲットは正常にインビジブル モードに切り替わります。オブジェクトを非表示に設定しなくても、アニメーションは問題なく動作します。手続き型コードのためにアニメーションを表示せずにまとめると、オブジェクトがすぐに非表示に設定されました。
アニメーションを表示して非表示モードに設定するにはどうすればよいですか。(ターゲット別名小惑星はさまざまな速度であり、速すぎるものもあれば遅いものもあります)ターゲットを非表示にするという考えは、それらが船にぶつかるのを防ぐことです。
この質問と回答を試しました cocos2d autoremove sprite after animation didt work
for (CCSprite *asteroid in _asteroids)
{
if (!asteroid.visible) continue;
for (CCSprite *shipLaser in _shipLasers)
{
if (!shipLaser.visible) continue;
if (CGRectIntersectsRect(shipLaser.boundingBox, asteroid.boundingBox))
{
[[SimpleAudioEngine sharedEngine] playEffect:@"explosion_large.caf"];
//explosion zombie animation starts
NSMutableArray *walkAnimFrames = [NSMutableArray array];
for(int i = 1; i <= 12; ++i)
{
[walkAnimFrames addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"zombieexplodes%d.png", i]]];
}
CCAnimation *walkAnim = [CCAnimation
animationWithFrames:walkAnimFrames delay:0.1f];
_dieAction = [CCRepeatForever actionWithAction:
[CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO]];
[asteroid runAction:_dieAction];
//explosion zombie ends
[self addPoint];
//change meme to woohoo.png
[_ship setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: @"woohoo.png"]];
shipLaser.visible = NO;
[asteroid setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: @"zombieexplodes13.png"]];
//asteroid.visible=NO;
continue;
}
}
}