例如,现在我有一个名为“Balls.as”的类。在这里,我加载了 10 个不同的球图像。你知道,像这样:
[Embed(source = "/ball1.png")]
[Embed(source = "/ball2.png")]
问题是,如果我生成 5 个球,这些球图像会被嵌入 5 * 5 次,对吗?如我错了请纠正我!所以我,我不能有一个ballimageloading类吗?加载这些图像一次,然后在 Balls.as 中加载我想要的任何球?
例如,现在我有一个名为“Balls.as”的类。在这里,我加载了 10 个不同的球图像。你知道,像这样:
[Embed(source = "/ball1.png")]
[Embed(source = "/ball2.png")]
问题是,如果我生成 5 个球,这些球图像会被嵌入 5 * 5 次,对吗?如我错了请纠正我!所以我,我不能有一个ballimageloading类吗?加载这些图像一次,然后在 Balls.as 中加载我想要的任何球?
您不需要“加载”它们,它们是嵌入的。您只需要实例化图像。拥有一个管理共享资源的类是个好主意,例如:
public class TextureAssets
{
[Embed(source = "../lib/ball1.png")]
private static var Ball1:Class;
[Embed(source = "../lib/ball2.png")]
private static var Ball2:Class;
public static var ball1Texture:BitmapData;
public static var ball2Texture:BitmapData;
public static function init():void
{
ball1Texture = (new Ball1() as Bitmap).bitmapData;
ball2Texture = (new Ball2() as Bitmap).bitmapData;
}
然后你会调用TextureAssets.init()
一次(例如在 Main.as 中),当你需要 bitmapData 时:使用new Bitmap(TextureAssets.ball1Texture)
这种方式你的程序只需要使用一个 bitmapData 所需的内存,而不是有很多最终是相同的。
如果您需要在保留原始数据的同时对 bitmapData 执行操作,您可以使用:
var modified:bitmapData = TextureAssets.ballTexture.clone();
此外,如果您要从一个类中实例化所有球图像,最好放弃静态访问,而是在构造函数中初始化 bitmapDatas,创建一个新的 TextureAssets() 并通过变量调用纹理
(静态字段访问比直接(。)访问:http: //jacksondunstan.com/articles/1690)
最佳实践是有一个Assets
包含静态嵌入图像的类,如下所示:
[Embed(source="ball1.png")]
public static var BallImage1:Class;
然后你所要做的就是为你的加载声明一个变量Bitmap
并使用它,就像这样:
protected var mBall1:Bitmap = new Assets.BallImage1() as Bitmap;
这将创建一个Bitmap
已加载图像的实例,然后您可以将其添加到显示列表中。每张图片只加载一次,所有图片都触手可及,可以从您拥有的每个班级访问。