それ自体が現在実行中のゲーム ロジックの子である call の子である call があるのでCCSprite
、この場合です。 永遠に繰り返されるアクションで画面を前後に移動し、それに乗っています。独自のアクションを実行できる場所に「降りて」「乗り込み」たいと思います。sprite
CCLayer
movingLayer
CCLayer
self
movingLayer
sprite
sprite
movingLayer
self
これをやろうとすると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
最初に追加しようとすると、既に追加されているものを追加しようとしてクラッシュします。