0

これが衝突です

   if(blue2.hitTestObject(_helicopter))

            {
                trace("YOU HIT THE BLOCK!");
                ihit = true;
                _helicopter.x = 76;
                _helicopter.y = 217;
            }

その衝突コードに一時停止機能を追加することは可能ですか ^ ? そうです、そこに何を書きますか?ありがとうございました!

4

1 に答える 1

1

一時停止は、コンテキストで解釈するのが少し難しいです。

たとえば、ゲームにフレーム ハンドラーがある場合、すべてのゲーム アニメーションを一定期間停止できます。または、「あなたはブロックを打った!」をフリーズしたいかもしれません。バックグラウンドアニメーションがまだ実行されている間、メッセージが一定期間表示されます。

1 つの方法は、タイマーを使用することです。非同期ですが、ここでの最終結果は、関数が一定時間 (ミリ秒) 後に呼び出されることです。

この例では、コードが実行されてから 5 秒後に、無名関数が時間切れであると応答します。

// needed imports:
import flash.events.TimerEvent;
import flash.utils.Timer;

if (blue2.hitTestObject(_helicopter))
{
    trace("YOU HIT THE BLOCK!");
    ihit = true;
    _helicopter.x = 76;
    _helicopter.y = 217;

    var timer:Timer = new Timer(5000); // 5-seconds
    timer.addEventListener(TimerEvent.TIMER, function(event:TimerEvent):void
    {
        timer.reset();
        timer.removeEventListener(TimerEvent.TIMER, arguments.callee);
        trace("5-seconds after hitting the block.");
    });
    timer.start();
}

無名関数が気に入らない場合は、次のように実装できます。

// needed imports:
import flash.events.TimerEvent;
import flash.utils.Timer;

if (blue2.hitTestObject(_helicopter))
{
    trace("YOU HIT THE BLOCK!");
    ihit = true;
    _helicopter.x = 76;
    _helicopter.y = 217;

    var timer:Timer = new Timer(5000); // 5-seconds
    timer.addEventListener(TimerEvent.TIMER, collisionWaitHandler);
    timer.start();
}

// ... later in its own function:

protected function collisionWaitHandler(event:TimerEvent):void
{
    var timer:Timer = Timer(event.currentTarget);
    timer.reset();
    timer.removeEventListener(TimerEvent.TIMER, collisionWaitHandler);

    trace("5-seconds after hitting the block.");
}
于 2012-04-05T20:22:18.837 に答える