gpt4 book ai didi

flash - 在 OpenFL 中创建多个 Sprite 实例?

转载 作者:行者123 更新时间:2023-12-02 02:18:39 36 4
gpt4 key购买 nike

我正在使用 SVG 图像加载 Sprite 图像,以便它们可以平滑缩放以匹配设备分辨率。目前,我天真地为每个 Sprite 渲染 SVG 数据,但我希望通过在多个 Sprite 实例之间共享渲染图像来减少内存开销并提高性能。

如何使用 OpenFL/Haxe 来实现这一点?

例如:

下面的图 block 实现很浪费,因为在创建时会为每个图 block 渲染 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;
}

}

最佳答案

就一个好问题和你的方法而言,我个人认为它太复杂且不必要的复杂。

如果您从不调整图 block 的大小,为什么不制作一个可以无限次重复使用且具有出色渲染性能的 bitmapData?只需渲染一次 SVG 并制作位图数据:

var bd:BitmapData = new BitmapData( tileWidth, tileHeight );
bd.draw(tile);
// add the bd to some array of your tile set or assign it to a tile skin variable

稍后可以轻松地通过图形对象 (bitmapFill) 或通过创建 Bitmap 对象来重用它。您甚至可以通过更改 bitmapData 属性来在 Bitmap 对象中设置动画!

如果您确实计划调整它的大小,我会对图 block 集进行一些尺寸变化并对其进行缩放。如果您要使用此方法,请注意,如果调整大小或/和旋转位图数据,使用allowSmooting将有助于渲染位图数据,但会减慢渲染速度,因为smooting计数为过滤器。

关于flash - 在 OpenFL 中创建多个 Sprite 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18220698/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com