0

次のように画像を埋め込む場合DataGroup

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

にあるアイテムの数だけ画像が埋め込まれDataGroupますか? それは悪い習慣と見なされますか?

4

1 に答える 1

1

画像は DataGroup 内の項目の数だけ埋め込まれますか?

いいえ、画像は一度だけ埋め込まれます。名前でアクセスできますItemRendererName_someimageClass。アイテム レンダラーのクラス名をTT次のように考えてください。

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

出力:

[class TT_someimageClass]
[class TT_someimageClass]

それは悪い習慣と見なされますか?

AS3 のコード スタイルの規則 (多くのオープンソース プロジェクト、as3 livedocs の例、および 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% の誤差の範囲内です。任意の 2 つのテストを入れ替えて、約 100 ミリ秒の同じ時間を得ることができるため、アセットを埋め込む方法によるパフォーマンスの違いはありません。

于 2013-07-28T15:57:55.387 に答える