2

お手数をおかけして申し訳ありませんが、私は少し困っているので、ここにいる誰かが私に手を差し伸べてくれるかどうか疑問に思っていました.

私は現在、敵が画面の左側 (境界外) に表示され、右側に移動するゲームを設計しています。私はいくつかのコードを使用しました (これは Sparrow Framework を使用しています)。敵を倒すと、ほとんどの敵の数が増加します。つまり、レベル 1 -> 敵 1 体、レベル 2 -> 敵 2 体、レベル 3 -> 敵 3 体など...

敵を作るのに苦労しています。乱数ジェネレーターによって選択された 5 つのセット パス (NSMutableArray のパス番号) のうちの 1 つにそれらを表示させますが、同じパス上に 1 つが重なって表示されることがよくあります。

敵を生成するために、いくつかのメソッドを実行しています: addEnemy -> 左から右に移動する敵 (アニメーション) を生成します。onTouchEnemy -> 敵に触れると死ぬ。drawEnemies drawEnemies をアクティブにします -> addEnemy をあなたのレベルに等しい回数呼び出します。次のようにコード化されます:

for(int i = 0; i < level; i++){
  [self performSelector:@selector(addEnemy) withObject:nil afterDelay:3.0];
}

敵を生産する方法をアクティブにする間に遅延があるようにプログラムする方法はありますか? この afterDelay を試してみましたが、何らかの理由でプログラムは 3 秒の遅延を無視し、敵を一気に生成するだけです。私はそれらをもっと整然とした形で表示したいので、これはかなりイライラします.

これを手伝ってくれる人に感謝します。シカト。

4

3 に答える 3

2

最後に余分な「* i」を付けて、これを行うつもりでしたか? このような:

for(int i = 0; i < level; i++){
    [self performSelector:@selector(addEnemy) withObject:nil afterDelay:3.0 * i];
}
于 2010-09-23T13:49:14.907 に答える
2

performSelector:withObject:afterDelay:コードの実行方法により、遅延を無視しているように見えます。その for ループはほぼ瞬時に繰り返され、addEnemyメソッドへの 3 つの呼び出しがキューに入れられます。3 秒後、addEnemy メソッドがほぼ同時に実行されます。

より良い結果を得るには、 を参照してくださいNSTimer。3 秒の間隔を設定して、繰り返すように指示することができます (必要な数の敵が生成された後、タイマーを無効にすることができます)。

何かのようなもの:

// creates and returns a new timer
// the timer is retained by the run loop for as long as it is valid
// invalidating the timer will cause the runloop to release it.
myTimer = [NSTimer scheduledTimerWithTimeInterval:3.0
                                 target:self
                               selector:@selector(addEnemy)
                               userInfo:nil
                                repeats:YES];

これにより、addEnemy メソッドが 3 秒ごとに起動されます。すでに作成した敵の数を記録し、最後の敵を作成したら、タイマーを停止して、再び発火しないようにします。

if (numberOfDesiredEnemies == numberOfEnemiesProduced)
{
    [myTimer invalidate], timer = nil;
}
于 2010-09-23T13:56:35.247 に答える
0

NSTimer クラスを調べてみてください。
定義済みの遅延およびループ条件でセレクターを実行する機能を提供するメソッドがいくつかあります。

于 2010-09-23T13:48:49.153 に答える