それ自体が現在実行中のゲーム ロジックの子である call の子である call があるのでCCSprite、この場合です。 永遠に繰り返されるアクションで画面を前後に移動し、それに乗っています。独自のアクションを実行できる場所に「降りて」「乗り込み」たいと思います。spriteCCLayermovingLayerCCLayerselfmovingLayerspritespritemovingLayerself
これをやろうとするとmovingLayer、削除spriteしselfて追加するように指示する必要がありますsprite. これは私がやったことです...
- (void)attack:(id)sender
{
[sprite stopAllActions];
[movingLayer removeChild:sprite cleanup:YES];
[self addChild:sprite z:1];
CGFloat distance = ccpDistance(sprite.position, ccp(sprite.position.x, -sprite.contentSize.height/2));
id goDown = [CCMoveTo actionWithDuration:distance/moveDuration position:ccp(sprite.position.x, -sprite.contentSize.height/2)];
id repeatDown = [CCRepeatForever actionWithAction:[CCSequence actions:[CCMoveTo actionWithDuration:0 position:ccp(sprite.position.x, sprite.contentSize.height/2+self.contentSize.height)], [CCMoveTo actionWithDuration:moveDuration position:ccp(sprite.position.x, -sprite.contentSize.height/2)], nil]];
id attackAction = [CCSequence actions:goDown, repeatDown, nil];
[sprite runAction:attackAction];
}
stopAllActions冗長だと思いますが、それは問題ではありません。sprite追加するmovingLayer前に削除selfすると、ゾンビにアクセスするためにクラッシュし、self最初に追加しようとすると、既に追加されているものを追加しようとしてクラッシュします。