Утечка памяти в текстовом поле Haxe / openfl

Я изучал Haxe с openfl и добавлял изображения и текст на экран, и сделал это.

Я начал с создания проекта через командную строку с 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 ГБ памяти и будет работать очень медленно, теперь загружая ровно 1863,6 МБ памяти. В конце концов, myText исчез после того, как программа работала очень медленно в течение еще 20 секунд, что заставляло bonzi вращаться почти нормально, но все еще занимало такое же количество памяти. Даже если я добавлю

if (bonzi.rotation >= 360) bonzi.rotation -= 360;

в цикле обновления, чтобы убедиться, что вращение находится в диапазоне [0; 360], происходит то же самое.

Странно, однако, если я что-то изменить, чтобы myText не менять в методе обновления использование памяти остается нормальным (15-30 Мб), например изменив Std.string (bonzi.rotation) на Std.string («Hi») или bozi.rotation + = 4 на bozi.rotation = 4.

Я в недоумении, почему это происходит. Это очень неудобно, так как в будущем я планирую часто использовать текстовые поля.

РЕДАКТИРОВАТЬ: мой полный код запускается через openfl через cpp — test

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);
}
}

2

Решение

мне кажется, это не проблема из твоего кода …

Вы должны подать проблему в репозитории github:

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

Пожалуйста, включите полный исполняемый образец, чтобы им было легче принять меры.

2

Другие решения


По вопросам рекламы [email protected]