1

だから私の考えは、敵を凍らせる特別な弾丸を持っていて、しばらくすると敵は自分自身を凍らせず、彼らの行動/アニメーションを続けることです. これが私がやったことの簡単なバージョンです:

-(void)update:(ccTime)dt
{
     CCSprite *enemySprite;
     CCARRAY_FOREACH(enemies, enemySprite)
     {
         if (CGRectIntersectsRect(_bullet.boundingBox, enemySprite.boundingBox))
         {
               _bullet.visible = NO;
               [enemySprite pauseSchedulerAndActions];
               enemySprite.pausingDuration = CACurrentMediaTime() +5;
         }
         if (CACurrentMediaTime() > enemySprite.pausingDuration)
              [enemySprite resumeSchedulerAndActions];
     }
}

さて、私が遭遇したと思う問題は、enemySprite がここでスケジューラの更新を停止したことです。そのため、次に更新メソッドが呼び出されたときに、一時停止されたenemySprite は更新されません! これを説明するより良い方法を知っていればよかったのですが、専門のプログラマーであれば、このコードの何が問題なのかすぐにわかると思います。コードを改善するための提案を手伝ってください。または、アイデアだけでもいただければ幸いです。お時間をいただきありがとうございます。

4

1 に答える 1

3

きみが呼んだ?:)

はい、pauseSchedulerAndActions と Director の一時停止メソッドはどちらも、一時停止するものと実行を継続できるもの (おそらく一時停止メニュー レイヤーなど) を制御できないため、一時停止を実装するためのくだらない方法です。

あなたの場合、少なくともより具体的にすることができます。たとえば、アクションを一時停止するだけで、スケジュールされた更新はできません。

[enemySprite.actionManager pauseTarget:enemySprite];

より細かく制御するには、各オブジェクトのスケジュールされたメソッドに過度に依存するのではなく、中央のオブジェクト (シーンまたはレイヤー) がすべての更新をその子に送信するようにすることをお勧めします。一時停止中に更新を受信します。

于 2013-02-07T21:59:44.217 に答える