在Flex中的ItemRenderer中嵌入图像

时间:2013-07-28 00:08:53

标签: actionscript-3 flex embed

如果我在DataGroup中嵌入了一些图像,如下所示:

[Embed(source="/assets/someimage.png")]
private var someimageClass:Class;

图像是否会嵌入DataGroup中的项目多次?它会被认为是一种不好的做法吗?

1 个答案:

答案 0 :(得分:1)

  

图像嵌入的次数是否与DataGroup中的项目一样多次

不,图片只会嵌入一次。您可以通过名称ItemRendererName_someimageClass访问它。请考虑您的项目渲染器类名称为TT

    trace(getDefinitionByName("TT_someimageClass"));
    trace(ApplicationDomain.currentDomain.getDefinition("TT_someimageClass"));

输出:

[class TT_someimageClass]
[class TT_someimageClass]
  

这会被视为不良做法吗?

通过AS3代码样式约定(用于开源项目,as3 livedocs examples和flex),嵌入资产的常用方法是将public static const用于公共资产,将private static const用于私有资产,但似乎所有这些案例之间的访问性能没有任何差异,请查看此基准:

package
{
import flash.display.Sprite;
import flash.utils.getTimer;

public class astest extends Sprite
{
    public function astest()
    {
        var tt1:TT = new TT();

        var clazz:Class;
        var t:uint, i:int;

        t == getTimer();
        for(i = 0; i < 100000; i++)
            clazz = TT.someimageClass2;
        trace("static var:", (getTimer() - t), "ms");

        t == getTimer();
        for(i = 0; i < 100000; i++)
            clazz = TT.someimageClass3;
        trace("static const:", (getTimer() - t), "ms");

        t == getTimer();
        for(i = 0; i < 100000; i++)
            clazz = tt1.someimageClass;
        trace("var:", (getTimer() - t), "ms");

        t == getTimer();
        for(i = 0; i < 100000; i++)
            clazz = tt1.someimageClass1;
        trace("const:", (getTimer() - t), "ms");

        var cache:Class = tt1.someimageClass;
        t == getTimer();
        for(i = 0; i < 100000; i++)
            clazz = cache;
        trace("cache:", (getTimer() - t), "ms");

    }

}
}

package
{

public class TT
{
    [Embed(source="vogel_small.jpg")]
    public var someimageClass:Class;

    [Embed(source="vogel_small.jpg")]
    public const someimageClass1:Class;

    [Embed(source="vogel_small.jpg")]
    public static const someimageClass2:Class;

    [Embed(source="vogel_small.jpg")]
    public static var someimageClass3:Class;

    public function TT()
    {
    }
}
}

输出:

static var: 85 ms
static const: 94 ms
var: 102 ms
const: 110 ms
cache: 118 ms

所有结果都在10%的误差范围内,您可以交换任意两个测试并获得大约100ms的相同时间,因此在嵌入资产的方式上性能没有任何差异。