0

さて、「onEnterFrameHandler」関数に関連付けられたcollisionTest関数があります。

したがって、見た目を単純化するには:

onEnterFrameHandler(e:Event):void{
testCollision();
}

testCollision():void{
  trace("always running");
  if(1_MC.hitTestObject(2_MC)){
    //do stuff
  }
}

問題は、常に実行されていることです。衝突をテストするために常に実行されています。それがこのプロジェクトの遅れを引き起こしているのではないかと感じています。

いつでもイベントをチェックできる必要があるが、イベントが発生していない間は実行されないようにする必要がある関数を制御する良い方法を知っていますか?

4

3 に答える 3

0

すべてのフレームをチェックする必要がない場合は、タイマーを使用して必要な頻度でのみチェックできます。たとえば、1秒間に3回チェックするのに十分であると判断した場合は、次のように設定します。 :

var timer:Timer = new Timer(333); //run 3 times a second
timer.addEventListneer(TimerEvent.TIMER, collisionTest, false, 0, true);
timer.start();

function collisionTest(e:Event = null):void {
   //do you collision stuffs
}

次に、何らかの理由で一時的に無効にしたい場合は、を使用timer.stop()してからtimer.start()もう一度

于 2012-08-20T21:32:07.177 に答える
0

衝突をチェックしていないときはかなりあいまいなので、この質問に答えるのは難しいです。パフォーマンスを改善するには、衝突テストの方法を変更するのではなく、いつチェックを行うかが重要です。

したがって、次のような if ステートメントを追加するだけでこれを行うことができます。

if (doCollisionTest){testCollision();}

しかし、それはいつが真か偽かを解決しませんdoCollisionTest。それはあなたが提供した情報からは答えられないトリッキーな部分です。

于 2012-08-20T21:27:17.660 に答える
0

通常、ゲーム ループでは常に衝突をチェックしています。何かをチェックする必要があるかどうかを示すフラグを提供します。

補足として、衝突検出キットの使用を検討してください。衝突に関して考えられるほぼすべてのシナリオを処理できることがわかると思います。

于 2012-08-22T15:53:34.987 に答える