2012-03-29 7 views
0

私はHaxe/Flashで書かれたゲームループを持っています。なんらかの理由で、時間の経過とともに減速します。まずそれは合理的に実行されますが、私のラップトップのファンが回転を開始し、それは遅くなり、遅くなります。なぜこれが起こるのだろうか?Haxe/Flashゲームのループが時間の経過とともに減速するのはなぜですか?

import flash.display.StageDisplayState; 
import flash.display.StageScaleMode; 
import flash.display.MovieClip; 
import flash.display.BitmapData; 
import flash.display.Stage; 
import flash.events.Event; 
import flash.geom.Matrix; 

class Driver { 
    static var scale:Int = 8; 
    static var stage:Stage 
     = flash.Lib.current.stage; 
    static var drv:Driver; 
    static var mc:MovieClip 
     = flash.Lib.current; 

    var x:Int; 

    var w:Int; 
    var h:Int; 
    var bbuf:BitmapData; 
    var mtx:Matrix; 

    private function tick() { 
     x = (x + 1) % Std.int(w/scale); 
    } 

    private function draw() { 
     bbuf.setPixel(x - 1, 10, 0); 
     bbuf.setPixel(x, 10, 0xff0000); 
    } 

    private function flip() { 
     mc.graphics.beginBitmapFill(bbuf, mtx); 
     mc.graphics.moveTo(0, 0); 
     mc.graphics.lineTo(w, 0); 
     mc.graphics.lineTo(w, h); 
     mc.graphics.lineTo(0, h); 
     mc.graphics.endFill(); 
    } 

    private function OnEnter(e:Event) { 
     tick(); 
     draw(); 
     flip(); 
    } 

    public function new() { 
     mtx = new Matrix(); 
     mtx.scale(scale, scale); 
     w = stage.stageWidth; 
     h = stage.stageHeight; 
     mc = flash.Lib.current; 
     bbuf = new BitmapData(
      Std.int(w/scale), Std.int(h/scale), 
      false, 0); 

     if (w % scale != 0) { 
      trace("width not a multiple of " 
       + "scale factor"); 
      return; 
     } 
     if (h % scale != 0) { 
      trace("height not a multiple of " 
       + "scale factor"); 
      return; 
     } 
     stage.addEventListener(
      Event.ENTER_FRAME, OnEnter); 
    } 

    static function main() { 
     drv = new Driver(); 
    } 
} 

プログラムは、画面全体に水平に移動する赤い点を示します。 1〜2分で、ドットは遅くなり、遅くなります。私はこれを2つの別々のシステム(Windows 7、Ubuntu 11)で試しました。

答えて

4

beginBitmapFillの前にグラフィックをクリアしてみてください。私は同じtopicを見つけましたが、beginBitmapFillが漏れるかもしれないことをドキュメンテーションで見つけられませんでした。

+0

ありがとう、これはうまくいって、これを知っているドキュメンテーションを読んで、私はなぜそれが動作するのか分かります。 – user1300292

+0

これを聞いてうれしいです。 – W55tKQbuRu28Q4xv

+1

"グラフィックをクリア"するだけで明確にするには、グラフィックスオブジェクトで 'Graphics.clear()'を呼び出すことを意味します。かつて私はそれが完全に機能していることに気付きました。 –

関連する問題