Я изучал 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);
}
}
мне кажется, это не проблема из твоего кода …
Вы должны подать проблему в репозитории github:
https://github.com/openfl/openfl/issues
Пожалуйста, включите полный исполняемый образец, чтобы им было легче принять меры.