2016-09-10 2 views
0

私はAS3プロジェクトに取り組んでいます。タイマーを使用して色を切り替えて停止させるエフェクトの1つについては、停止します。この機能は以下の通りです。タイマー効率

//global variable 
    private var valueAnimationTimer:Timer = new Timer(50); 
    //constructor 
    valueAnimationTimer.addEventListener(TimerEvent.TIMER, scrollUp); 
    //function 
    private function scrollUp(e:TimerEvent):void 
      { 

       var i:int = e.currentTarget.currentCount as int; 
       if (i < 10) 
       { 
        if (colored){ 
         if (i % 2 == 0){ 
          ChangeColor(ico, flickerColor); 
         } 
         else{ 
          ico.transform.colorTransform = new ColorTransform(); 
         } 
        } 
        tfValue.y -= 7.5; 
       } 
       else 
       { 
        RemoveFilters(ico); 
        tfValue.y = ico.height/2; 
        e.currentTarget.reset(); 
        RemoveSprite(tfValue); 
        colored = false; 
       } 
      } 

各キャラクター(オブジェクト)にはこの機能の独自のバージョンがあり、異なる時間に(怪我をしたり被害を受けたときなどに)発生します。リスナーはコンストラクターに一度追加され、キャラクターが死んでステージから削除されたときにのみリスナーが削除されます。ここでの問題は、タイマーが少なくとも3文字で使用された後で、フレームレートが低下し始めることです。関数が呼び出されるたびに、フレームレートが低くなります。

タイマーが停止し、リスナーが1回だけ追加されてスタックに過負荷がかからない場合、リスナーが実際に使用された後にフレームレートが低下するのはなぜですか?それは少しの時間だけ永遠に実行されませんが、それは何度も繰り返されます。フレームレートが低下すると、プログラム全体が遅れて最終的にフリーズします。私はこの

+2

タイマーリスナーを1時間

を繰り返し分タイマーはゲームでタイミングを処理するため、かなり非効率的な方法です。何かを更新する必要がある場合は、すべてのサイクルをチェックする単一のゲームループを持つ方がはるかに優れています。タイマーを使用すると、ゲームサイクルで複数のリスナーが発砲することがあります。このように多くのキャラクターが設定されていると、プレーヤーに負担がかかります。私は参照してください – xxbbcc

+0

。私は別のフォーラムスレッドを見ていて、誰かがAS3は50-100 +オブジェクトやそのイベントを簡単に処理できると言っていたので、すべてが思いやりのあるものになると思いました。ありがとう:) –

+0

Event.ENTER_FRAMEリスナーはどれくらい効率的ですか? AS3はそれをより効率的に処理できますか? –

答えて

0

はまた、タイマー機能の内、最初の数字はミリ秒単位であなたのカウント数であり、第二は、繰り返し回数

var fl_TimerInstance:Timer = new Timer(240000, 1); 

であるので、上記のこの例では4であることに注意して原因を見当がつかない笑あなたは非常に迅速である50ミリ秒に設定されているので、私はこれを持ち出す