5

たとえば、現在、「Balls.as」というクラスがあります。ここでは、10 個の異なるボールの画像を読み込みます。あなたが知っている、このように:

[Embed(source = "/ball1.png")]
[Embed(source = "/ball2.png")]

問題は、5 つのボールをスポーンすると、これらのボールの画像が 5 * 5 回埋め込まれてしまうことです。間違っていたら訂正してください!だから私は、ballimageloadingクラスを持つことはできませんか?これらの画像を一度ロードしてから、Balls.as にロードします。

4

2 に答える 2

11

それらを「ロード」する必要はありません。それらは埋め込まれています。イメージをインスタンス化するだけです。次のように、共有リソースを管理するクラスを 1 つ持つことをお勧めします。

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 などで) 1 回呼び出し、bitmapData が必要なときに次のように呼び出しnew Bitmap(TextureAssets.ball1Texture)
ます。
オリジナルを維持しながら bitmapData で操作を実行する必要がある場合は、次を使用できます。

var modified:bitmapData = TextureAssets.ballTexture.clone();


また、1 つのクラス内からすべてのボール イメージをインスタンス化する場合は、静的アクセスを削除し、代わりにコンストラクターで bitmapDatas を初期化し、新しい TextureAssets() を作成して、変数を介してテクスチャを呼び出すことをお勧めします
(静的フィールド アクセスは、直接 (.) アクセス: http://jacksondunstan.com/articles/1690 )

于 2013-01-27T16:43:18.960 に答える
10

ベスト プラクティスはAssets、次のように静的な埋め込み画像を含むクラスを用意することです。

[Embed(source="ball1.png")]
public static var BallImage1:Class;

次に、次のように、ロードされた変数を宣言してBitmap使用するだけです。

protected var mBall1:Bitmap = new Assets.BallImage1() as Bitmap;

これにより、読み込まれた画像のインスタンスが作成Bitmapされ、表示リストに追加できます。読み込みは画像ごとに 1 回だけ行われ、すべての画像にすぐにアクセスでき、すべてのクラスからアクセスできます。

于 2013-01-27T16:32:23.513 に答える