c++ - Haxe/openfl 文本字段内存泄漏

标签 c++ memory-leaks textfield haxe openfl

我正在学习一些使用 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/

相关文章:

c++ - 获取最接近键的 std::container::iterator

Javascript内存泄漏setTimeout问题

java - 无法获取文本字段中的文本输入以解析为双倍

jQuery : multiply two text fields and update into 3rd text field

c++ - “throw expression code”返回d> 1e7是什么?抛出std::overflow_error(“too big”):d;意思?

c++ - c/c++中两个函数内容相同时,哪种风格更好?

c++ - 为什么我的可变参数模板实例化不起作用?

java - PermGen 空间错误 - Glassfish 服务器

Python实例删除

flutter - 如何强制用户在 Flutter 的 TextField 中输入至少 2 个字符?