1

SWF アニメーションをロードしていて、同時に複数の場所に表示したいのですが、それを行う方法を理解できる唯一の方法は、次に示すように、表示するたびにロードすることです。

private function playSounds():void {
    for (var i:Number = 0; i < 14; i++)
    {
        for (var a:Number = 0; a < 16; a++)
        {               
            if (boxes[i][a].x == linePos && boxes[i][a].selected == true && played[i][a] == false)
            {                   
                played[i][a] = true;
                MovieClip();
                var swf:URLRequest = new URLRequest("../assets/glow2.swf")
                var glow:Loader = new Loader()
                glow.load(swf)
                glow.x = boxes[i][a].x - 25*0.7;
                glow.y = boxes[i][a].y - 27*0.7;
                glow.scaleX = 0.7;
                glow.scaleY = 0.7;
                this.addChild(glow);
                glows.push(glow)
                glowTime.push(0)
                var sc:SoundChannel = new SoundChannel();
                sc = (sounds[i] as Sound).play();
            }
        }
    }
}

これは、一度に 5 回以上表示されると非常に遅くなるため、一度だけロードして複数の場所で使用する方法があるかどうか疑問に思っています。

4

2 に答える 2

1

contentプロパティがありLoaderます。したがって、一度ロードすると、コンテンツを何度も使用できます。

編集:ロードされたコンテンツを使用する前に、ロードがいつ完了するかを知るためにリスナーを追加することができます:

addEventListener(Event.COMPLETE, completeHandler);

編集2:

var mc1:MovieClip = new MovieClip();
var mc2:MovieClip = new MovieClip();

var my_Loader:Loader = new Loader();
mc1.addChild(my_Loader);
mc2.addChild(my_Loader);

(試していませんが)。

于 2012-02-10T10:11:37.037 に答える
0

簡単な回避策の 1 つは、2 番目のローダーを作成し、ロードされたバイトをloadBytes()メソッドを介してそれに渡すことです。

var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE,ready);
l.load(new URLRequest("../assets/glow2.swf"));

function ready(event:Event):void{
    var mc:MovieClip = event.currentTarget.content as MovieClip;

    var clone:Loader = new Loader();
    clone.loadBytes(event.currentTarget.bytes);

    addChild(mc);
    addChild(clone);

    clone.x = 100;
}

これはほとんどの場合に機能します。場合によっては、次のような簡単なことでうまくいくはずです。

var clone:MovieClip = MovieClip(new mc.constructor());

また、3 番目のオプションもあります。ムービクリップを「ブリッティング」します。これは、1 つ以上 (キャッシュする必要がある MoveClip フレームの数に応じて) をメモリに保存し、必要なソース MovieClip からdraw()する BitmapData オブジェクトを保存することを意味します。 (同時に複数の場所で)描画します。

loadBytes アプローチは、質問が示唆することを実現します。ローダーのコピーを作成するため、ロードされたバイトを再利用しますが、新しいコンテンツを初期化するため、そのためにメモリを使用します。これが必要でない場合は、BitmapData を使用して MovieClip をキャッシュするのが最善の策です。

于 2012-02-11T18:55:36.540 に答える