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