在Actionscript中,是否有方法创建加载程序的副本或缓存版本?

在Actionscript中,是否有方法创建加载程序的副本或缓存版本?,actionscript,flash,loader,movieclip,displayobject,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 == line

我正在加载一个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();
            }
        }
    }
}
专用函数playSounds():void{
对于(变量i:Number=0;i<14;i++)
{
对于(变量a:Number=0;a<16;a++)
{               
if(box[i][a].x==linePos&&box[i][a].selected==true&&played[i][a]==false)
{                   
玩[i][a]=真;
MovieClip();
var-swf:URLRequest=new-URLRequest(“../assets/glow2.swf”)
变量glow:Loader=newloader()
辉光负载(swf)
辉光.x=box[i][a].x-25*0.7;
y=box[i][a].y-27*0.7;
glow.scaleX=0.7;
glow.scaleY=0.7;
这个.addChild(发光);
发光。推(发光)
glowTime.push(0)
var sc:SoundChannel=新的SoundChannel();
sc=(听起来像声音一样);
}
}
}
}

当一次显示超过5次时,速度非常慢,因此我想知道是否有一种方法可以只加载一次并在多个位置使用它。

您拥有
加载程序的
内容
属性。
因此,一次加载,多次使用内容

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

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);

(但尚未尝试)。

您拥有
加载程序的
内容
属性。
因此,一次加载,多次使用内容

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

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);

(尚未尝试)。

一个快速解决方法是创建第二个加载程序,并通过以下方法将加载的字节传递给该加载程序:

这在大多数情况下都有效。在某些情况下,您应该能够通过以下简单的方式逃脱:

var clone:MovieClip = MovieClip(new mc.constructor());
还有第三个选项:“bliting”您的MovieClip,这意味着您将在内存中存储一个或多个(取决于需要缓存的MoveClip帧数)位图数据对象,这些对象将来自您要绘制的源MovieClip(同时在多个位置)

loadBytes方法实现了问题的建议:创建加载程序的一个副本,因此它重新使用加载的字节,但初始化新内容,因此为此使用内存。
如果这不是您所需要的,那么使用BitmapData缓存MovieClip是最佳选择

一个快速解决方法是创建第二个加载程序,并通过以下方法将加载的字节传递给该加载程序:

这在大多数情况下都有效。在某些情况下,您应该能够通过以下简单的方式逃脱:

var clone:MovieClip = MovieClip(new mc.constructor());
还有第三个选项:“bliting”您的MovieClip,这意味着您将在内存中存储一个或多个(取决于需要缓存的MoveClip帧数)位图数据对象,这些对象将来自您要绘制的源MovieClip(同时在多个位置)

loadBytes方法实现了问题的建议:创建加载程序的一个副本,因此它重新使用加载的字节,但初始化新内容,因此为此使用内存。
如果这不是您所需要的,那么使用BitmapData缓存MovieClip是最佳选择

我也尝试过使用内容,但它仍然充当加载程序的引用,因此如果我设置了一个新位置,则旧位置的swf将消失。可能您必须多次添加子项。编辑了这个问题的答案。我认为如果你将同一个对象作为子对象添加到两个不同的对象中,它将从原始父对象中删除并放置到新对象中。不能两者兼而有之。我也尝试过使用内容,但它仍然充当加载程序的引用,因此如果我设置了一个新位置,则旧位置的swf将消失。可能您必须多次添加该子项。编辑了这个问题的答案。我认为如果你将同一个对象作为子对象添加到两个不同的对象中,它将从原始父对象中删除并放置到新对象中。不可能两者兼而有之。是的,我做了这项工作,但我不知道这是否真的提高了绩效。它仍然需要加载所有的字节,它只是从不同的地方获取它们。你的标题建议你只想重用加载的内容,但听起来你想将一个电影剪辑作为像素缓存到内存中。是的,我做了这项工作,但我不知道它是否真的在提高性能。它仍然需要加载所有字节,只是从不同的位置获取它们。您的标题建议您只想重用加载的内容,但听起来好像您想将MovieClip作为像素缓存到内存中