0

私は小さなゲームを設計しており、mob オブジェクトのクラスを作成しています。このクラスには、このオブジェクトの複数のインスタンスを作成するのに役立ついくつかの広範な変数が含まれています。私が書いているmobクラスの画像をロードするために使用できるメインクラスのローダーの代わりに、クラス内にローダーを持っていても大丈夫かどうか疑問に思っていました。

これは良い習慣ですか?複数のローダーを持つことについての投稿を見たことがありますが、これはそのようなものですが、最も効率的なものについて言及している投稿はありませんでした。以前に他のプロジェクトでこれを行ったことがありますが、ベンチマークなどはありません。

したがって、各インスタンス化で独自のローダーを使用し、イメージがロードされた後に null に設定するには、これがリソースを大量に消費しないかどうかを誰かに教えてもらえますか? プロジェクトの範囲はかなり基本的なものですが、将来のプロジェクトのために知っておくとよいでしょう。

- 編集 -

graphics.copyfrom(source) を調べたところ、うまくいかないことに気付きました。さらに調査を重ねた結果、「ムービークリップの複製」が驚くほど不足していることがわかりました。また、私が恐れていたように、複数のムービークリップをローダー コンテンツにポイントすると、1 つを削除しようとしたときにすべて削除されました。

悲しいことに、私の最初の選択は効率的ではないかもしれませんが、これが基本的にこれを行う唯一の方法です...各モブにはアニメーション化された SWF ムービークリップがあるため、ビットマップを作成できません。また、ローダーのコンテンツを再利用することもできません。複数のムービークリップがそれを指している場合、1 つのモブを変更すると残りのムービークリップが変更されるためです。残念ながら、今のところは、Mob ごとに独自のローダー (使用後に null に設定) を持ち、外部の swf をロードすることに固執します。どうやらAS2でこれを行う方法があったようで、ドキュメントクラスでライブラリシンボルを使用したくありません。だから、私は立ち往生しています。私が推測する助けをありがとう、私の問題の解決策を見つけたら投稿してください!

- 編集 -

コードスニペットも役立つかもしれないと考えました。これらは 20 以上のフレームが読み込まれる swfs であることに注意してください。

public class Spawner {

        var mc:MovieClip;
        var loader:Loader;
        var refr:Stage;
        var x:Number,y:Number;
        var loaded:Boolean = false;

        public function Spawner(ref:Stage, type:String, inx:Number, iny:Number) {
            refr = ref;
            x = inx;
            y = iny;
            loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadImg);
            loader.load(new URLRequest(type));
        }//constructor

        public function loadImg(e:Event):void{
            mc = MovieClip(e.target.content);
            loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadImg);
            refr.addChild(mc);
            mc.gotoAndStop(1);
            mc.x = x;
            mc.y = y;
            refr = null;
            loader = null;
            loaded = true;
        }//loadImg

    }//class
4

2 に答える 2

0

それは本当に悪い考えのように聞こえます。インスタンスごとに新しいイメージをロードしています。

グラフィックリポジトリとして機能するローダーを含むクラスを作成しないでください。ゲームの特定のセクションで必要なすべての画像をロードし、ロードした各画像の BitmapData インスタンスを公開します。

このようにして、各 Mob インスタンスを独自の Bitmap でグラフィカルに表現できますが、すべての Bitmap のコンテンツは、グラフィック リポジトリ内にロードされた単一の BitmapData インスタンスによって定義され、大量のメモリを節約し、サーバーに要求を送信する必要がなくなります。これは非常に非効率的です。

視覚的には、次のようになります。

ここに画像の説明を入力

于 2013-05-01T00:52:16.790 に答える