因为您的SWF位于Web服务器上,您是否预加载?如果是这样,则一种选择是从服务器预加载字节,而不使用URLLoader实际解释它们。然后,当您需要显示MovieClip时,使用Loader.loadBytes将预加载的字节(URLLoader.data)注入Loader以实际实例化MovieClip(并开始播放,声音和全部)。实例化时可能会有一点滞后,但比没有预加载器要少得多。
根据您对loader.content类型的问题:
package
{
import flash.display.Sprite;
import flash.display.Loader;
import flash.display.Bitmap;
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.ByteArray;
import flash.utils.getQualifiedClassName;
public class tst extends Sprite
{
[Embed(source="any_image.png", mimeType="application/octet-stream")]
private var img_bytes:Class;
[Embed(source="any_swf.swf", mimeType="application/octet-stream")]
private var swf_bytes:Class;
public function tst():void
{
var b1:ByteArray = new img_bytes();
var l1:Loader = new Loader();
l1.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void {
trace(getQualifiedClassName(l1.content));
trace(l1.content is Bitmap);
});
l1.loadBytes(b1);
var b2:ByteArray = new swf_bytes();
var l2:Loader = new Loader();
l2.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void {
trace(getQualifiedClassName(l2.content));
trace(l2.content is MovieClip);
});
l2.loadBytes(b2);
}
}
}
(注意:这仅仅是示范代码 - 切勿用函数闭包这样的添加事件侦听器,就会造成内存泄漏,我也跳过URLLoader,并简单地嵌入来获取我的字节,但它们是相同的字节)。
,输出是:
flash.display::Bitmap
true
test_fla::MainTimeline
true
然而,位图和影片剪辑是不是loader.content唯一的选择 - 从加载代码编译的SWF可以从雪碧中导出,并且可以显示完整的类名称,尽管www0z0k指出,它们都是从DisplayObject派生的。尽管我相信Flash Professional的任何SWF输出都始自MovieClip。
根据您的注意,装载机字节始终是影片剪辑
事实证明你是对的 - 加载一个普通的旧图像的加载器,contentLoaderInfo.bytes属性包含生成的SWF是字节一个简单的MovieClip包装器,其图像为Child。谁会猜到?!
var l3:Loader = new Loader();
l3.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void {
trace("- l3:");
trace(getQualifiedClassName(l3.content));
trace(l3.content is Bitmap);
// This ByteArray is a SWF!
var b3:ByteArray = l3.contentLoaderInfo.bytes;
var l4:Loader = new Loader();
l4.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void {
trace("- l4:");
trace(getQualifiedClassName(l4.content));
trace(l4.content is Bitmap);
trace(Object(l4.content).getChildAt(0) is Bitmap);
});
l4.loadBytes(b3);
addChild(l4);
});
l3.load(new URLRequest("any_image.png"));
输出是:
- l3:
flash.display::Bitmap
true
- l4:
flash.display::MovieClip
false
true
这正是诸如此类的事情,我一直在寻找。 – 2012-04-23 18:20:12
相关问题:如果我实际上没有加载对象,那么确定它是否应该是图像的最佳方法是什么?我注意到过去加载一个图像数据的字节数组会产生一个影片剪辑。 – 2012-04-23 18:23:56
我不确定我是否完全理解你的问题,但是你在使用Loader.loadBytes后会得到一个Event.COMPLETE,在这个时候Loader。内容应该是位图(例如,如果字节是JPEG或PNG)或MovieClip(如果字节是SWF),那么您应该知道您是否可以与它进行交互(停止/播放)。 – 2012-04-23 20:31:48