我正在用openfl学习一些Haxe,然后在屏幕上添加图像和文本。

我首先使用openfl在命令行中创建一个项目,然后使用以下命令添加了更新框架事件监听器,图片和文本:

addChild(myText);
stage.addEventListener(Event.ENTER_FRAME, update);
bonzi = new Bitmap(Assets.getBitmapData("assets/bonzi.jpg"));
addChild(bonzi);

在update()方法中,我输入:
bonzi.rotation += 4;
myText.text = bonzi.rotation;

像预期的那样工作,bonzi.jpg围绕左上角旋转,并在同一角显示显示旋转的文本字段。

现在是问题所在:如果我让它运行〜30秒钟,该程序将耗尽我的1.8 Gb内存,然后运行非常缓慢,现在恰好占用了1863.6 Mb的内存。最终,在程序运行非常缓慢约20秒后,myText消失了,使bonzi几乎正常旋转,但仍占用相同的内存量。即使我加
if (bonzi.rotation >= 360) bonzi.rotation -= 360;

到更新循环以确保旋转保持在[0; 360]范围内,也会发生相同的情况。

但是,奇怪的是,如果我进行了一些更改以使myText不会更改,则更新方法中的会保持正常的内存使用率(15-30 Mb),例如将Std.string(bonzi.rotation)更改为Std.string(“Hi”)或将bozi.rotation + = 4更改为bozi.rotation = 4。

我不知道为什么会这样。这是非常不方便的,因为我计划在将来大量使用文本字段。

编辑:我的完整代码通过cpp通过openfl-测试
package;

import openfl.display.Sprite;
import openfl.display.Bitmap;
import openfl.Assets;
import openfl.text.TextField;
import openfl.events.Event;
import openfl.system.System;

class Main extends Sprite {

    public var bonzi:Bitmap;
    public var myText:TextField = new TextField();

    public function new() {
        super();

        addChild(myText);
        stage.addEventListener(Event.ENTER_FRAME, update);

        bonzi = new Bitmap(Assets.getBitmapData("assets/bonzi.jpg"));
        addChild(bonzi);
        bonzi.rotation = 260;
        myText.text = Std.string(bonzi.rotation);
    }


    public function update(e:Event):Void {
        bonzi.rotation += 4;
        if (bonzi.rotation >= 180) bonzi.rotation -= 360;

        myText.text = Std.string(bonzi.rotation);
    }
}

最佳答案

从您的代码来看,这似乎对我来说不是问题...

您应该在那里的github仓库提交问题:

https://github.com/openfl/openfl/issues

请提供完整的可运行示例,以便他们更轻松地采取行动。

10-08 08:22