我正在学习一些使用 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 - test 通过 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
请提供完整的可运行示例,以便他们更容易采取行动。
关于c++ - Haxe/openfl 文本字段内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30506202/