2012-04-05 10 views
0

これは衝突Flash CS5で「衝突した場合」を一時停止する方法は?

if(blue2.hitTestObject(_helicopter)) 

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

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

答えて

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."); 
} 
関連する問題