2011-07-13 16 views
0

私は何らかの種類のラウンドで動作するシューティングゲームを持っています。たとえば、このラウンドでは、ユーザーが撮影しなければならない画面上に4人の敵を表示します。私は4人の敵をそれぞれの半分の間隔で見せるので、すべて同じ時間に現れない。以下のようなものを使用する:AS3複数のタイマーを使用して敵を表示/非表示にする

enemiesShowTimer = new Timer(0.5 * 1000, 1); 
enemiesShowTimer.addEventListener(TimerEvent.TIMER, showEnemyAtTime); 
enemiesShowTimer.start(); 

プレイヤーは、彼らが表示された後、それぞれの敵を殺すために2秒を持っているので、私はまた、これを使用する:プレイヤーが死んだ後

は問題がある
enemiesCleanTimer = new Timer(roundConfig.getSecondsPerEnemy() * 1000, 1); 
enemiesCleanTimer.addEventListener(TimerEvent.TIMER, cleanEnemies); 
enemiesCleanTimer.start(); 

、私はシーンを変更している場合私はまだ生きている3つの敵を持っている、スレッドはメソッドを実行しようとするとクラッシュします。私はそれが必要なときはいつでも、タイマを起動するのに常に同じ変数を使用しています。どうすればこの問題を解決できますか?私はリストにそれぞれの "スレッド"(タイマー)を格納し、それぞれ別々に停止する必要がありますか?それがそうであるので、他のスレッドはある種の "limbo"にあり、私はそれを止めません。ちょうど最後のものです。

助けてください?

ありがとうございました!

答えて

1

まず、本当にすぐに、ここにはスレッドがないと言います.AS3にはマルチスレッドがありません。だから、その言葉は非常に特殊な意味を持つので、その言葉を使わないようにしましょう。これはそれではなく、それを使用すると混乱につながります。

問題が解決したら、各タイマーを終了する必要があります。したがって、シーンを切り替えるときに、それぞれを参照してから停止またはリセットを呼び出す必要があります。簡単な方法は、それらをすべて配列に格納し、それらを停止する必要があるときにループすることです。

お手数ですが、それ以上のご質問がある場合はお知らせください。

1

通常、ゲーム状況では、複数のタイマー(およびそれらを実行するオーバーヘッド/パフォーマンスヒット)を避けるために、GameLoopのようなものが呼び出され、(ゲームがアクティブな間は)オブジェクトは必要に応じて登録/登録解除されます。

ちなみに、これはまた、ゲームを一時停止する簡単な方法を提供します。

これは良い理由があると確信していますが、AS3のTimerインスタンスを上書きすると、前のタイマーは無期限に実行され続けます(ポインタが上書きされるため)。タイラーが言及したように、タイマーを上書きする前にタイマーを停止したいと思うでしょう。

関連する問題