【发布时间】:2015-05-28 12:10:14
【问题描述】:
我正在使用 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 的内存。最终 myText 在程序运行非常慢约 20 秒后消失了,使 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);
}
}
【问题讨论】:
-
有趣。您能否提供您正在测试的确切代码?
标签: c++ memory-leaks textfield haxe openfl