私は小さなゲームを設計しており、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