Почему цикл игры Haxe / Flash замедляется со временем? - PullRequest
0 голосов
/ 29 марта 2012

У меня есть игровой цикл, написанный на 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();
    }
}

Программа показывает красную точку, перемещающуюся по экрану по горизонтали.В течение минуты или двух точка становится все медленнее и медленнее.Я пробовал это на двух отдельных системах (Windows 7, Ubuntu 11).

1 Ответ

4 голосов
/ 29 марта 2012

Попробуйте очистить графику, прежде чем beginBitmapFill.Я нашел такую ​​же тему , но не нашел в документации, что beginBitmapFill может просочиться.

...