Я загружаю изображения спрайтов с помощью SVG-изображений, чтобы они плавно масштабировались в соответствии с разрешениями устройства. В настоящее время я наивно передаю SVG-данные для каждого спрайта, но я хотел бы уменьшить накладные расходы памяти и повысить производительность за счет совместного использования отображаемого изображения через несколько экземпляров спрайтов.Создание нескольких экземпляров спрайтов в OpenFL?
Как это можно достичь с помощью OpenFL/Haxe?
Например:
Реализация плитки ниже расточительно, так как SVG-изображение визуализируется для каждой плитки при создании.
// Each of the following tile sprites contain copies of the same image.
var xyz1:Tile = new Tile("xyz");
var xyz2:Tile = new Tile("xyz");
var xyz3:Tile = new Tile("xyz");
плитка Реализация
package;
import flash.display.Shape;
import format.SVG;
import openfl.Assets;
class Tile extends Shape {
// Static cache of SVG data to avoid loading asset each time.
private static var tileImageMap:Map<String, SVG> = new Map<String, SVG>();
private static function lookupSVG(tile:String):SVG {
var svg:SVG = tileImageMap.get(tile);
if (svg == null) {
svg = new SVG(Assets.getText("img/" + tile + ".svg"));
tileImageMap.set(tile, svg);
}
return svg;
}
public var tile(get,set):String;
private var _tile:String;
private function get_tile():String {
return _tile;
}
private function set_tile(value:String):String {
if (value != _tile) {
_tile = value;
// Render tile SVG to tile sprite.
// How can this be cached and reused by multiple tile instances?
graphics.clear();
lookupSVG(value).render(graphics, 0, 0, 56, 56);
}
return _tile;
}
public function new(tile:String) {
super();
cacheAsBitmap = true;
this.tile = tile;
}
}
Классного способ использования SVG ... Также интересно услышать ответ –