在Actionscript中,有没有办法创建Loader的副本或缓存版本?

时间:2012-02-10 03:35:39

标签: actionscript flash loader movieclip displayobject

我正在加载一个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次时非常慢,所以我想知道是否有一种方法只需加载一次并在多个地方使用它。

2 个答案:

答案 0 :(得分:1)

您拥有content的{​​{1}}属性。 因此,加载一次,多次使用内容。

编辑:在使用加载的内容之前,您可能想要添加一个监听器以了解加载何时完成:

Loader

EDIT2:

addEventListener(Event.COMPLETE, completeHandler);

(虽然没试过)。

答案 1 :(得分:0)

一个快速的解决方法是创建第二个加载器并通过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());

还有一个第三个选项:'blitting'你的moviclip,这意味着你将存储一个或多个(取决于你需要缓存多少个MoveClip帧)的BitmapData对象在内存中draw()要绘制的源MovieClip(同时在多个位置)。

loadBytes方法实现了问题所暗示的内容:创建Loader的副本,因此它重新使用加载的字节,但初始化新内容,因此使用内存。 如果这不是您所需要的,使用BitmapData缓存MovieClip是您最好的选择。