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)で試しました。
ありがとう、これはうまくいって、これを知っているドキュメンテーションを読んで、私はなぜそれが動作するのか分かります。 – user1300292
これを聞いてうれしいです。 – W55tKQbuRu28Q4xv
"グラフィックをクリア"するだけで明確にするには、グラフィックスオブジェクトで 'Graphics.clear()'を呼び出すことを意味します。かつて私はそれが完全に機能していることに気付きました。 –