あなたが引用したコードから、タイマーコンストラクターは、repeatCount
それが無期限に繰り返されることを示すことを指定していません。ハンドラーを呼び出すにはtimerDone()
、繰り返し回数を指定する必要があります。
また、20 ミリ秒未満の遅延は推奨されないことに注意してください。
タイマー コンストラクターのパラメーター:Timer(delay:Number, repeatCount:int = 0)
delay:Number
— ミリ秒単位のタイマー イベント間の遅延。20 ミリ秒未満の遅延は推奨されません。タイマーの頻度は 1 秒あたり 60 フレームに制限されています。つまり、遅延が 16.6 ミリ秒未満であると、実行時に問題が発生します。
repeatCount:int
(デフォルト = 0) — 繰り返し回数を指定します。ゼロの場合、タイマーは最大 24.86 日 ( int.MAX_VALUE + 1
) まで無期限に繰り返されます。ゼロ以外の場合、タイマーは指定された回数実行されてから停止します。
アニメーション コンテンツにはタイマーを使用しないことをお勧めします。代わりに、Event.ENTER_FRAME
フレームベースのアニメーションを操作するために使用してください。
1 つのアプローチは、タイマーを使用してゲーム モデルの状態変更をトリガーすることです。
/** timer */
var timer:Timer;
/** whether enemies are advancing */
var advance:Boolean = false;
// start timer at 5-seconds intervals
timer = new Timer(5000);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.start();
// animation controlled by Event.ENTER_FRAME
addEventListener(Event.ENTER_FRAME, frameHandler);
タイマー ハンドラーでは、ゲームの状態に応じてタイマーの遅延を調整できます。
/** timer handler */
function timerHandler(event:TimerEvent):void
{
// stop the current timer
timer.stop();
// depending on the current enemy state
switch (advance)
{
// if true, stop advancing and wait 5-seconds
case true:
trace("Stop advancing, wait 5-seconds");
timer.delay = 5000;
break;
// if false, advance for 2-seconds
case false:
trace("Advance for next 2-seconds");
timer.delay = 2000;
break;
}
// invert advance state.
advance = !advance;
// restart timer
timer.start();
}
同様に、エンター フレームで、ゲームの状態に基づいて敵のアニメーションを制御します。
/** frame handler, advancing enemy if 'advance' is true */
function frameHandler(event:Event):void
{
if (advance) { /** move enemy forward */ }
}
これにより、敵の状態が交互になり、次のように出力されます。
次の 2 秒間
前進する 前進を停止し、5 秒待つ
次の 2 秒間前進する
前進を停止し、5 秒待つ
次の 2 秒間前進する