2016-03-05 40 views
1
var file:FileReference=new FileReference(); 

然后AS3嵌入上传SWF到现场

trace (file.data); 

后,我试图以接收到的数据嵌入到现场,但没有成功

var ExtSWF:MovieClip; 
ExtSWF = file.data.readObject() as MovieClip; 
trace(ExtSWF); 
工作正常

返回null

,但如果我加载远程文件,用Loader - 它工作得很好

var ldr:Loader = new Loader(); 
ldr.load(new URLRequest("ext.swf")); 
...... 
ExtSWF = MovieClip(ldr.contentLoaderInfo.content); 

是否有可能只需上传SWF文件,并将其嵌入到现场,或Loader类是archieve这一目标的唯一的可能性?

回答

1

Loader类用于加载SWF文件或图像(JPG,PNG或GIF) 文件。

但是,“加载”真正意思是“解码格式”用于显示。因此,请使用Loader.loadbytes将您的file.data字节通过加载程序解码为有效的MovieClip对象。

尝试

//var ExtSWF : MovieClip = new MovieClip; 
//ExtSWF = file.data.readObject() as MovieClip; 
var ldr : Loader = new Loader(); //# declare outside of any functions (make as public var) 
ldr.loadBytes(file.data); //#use Loader to auto-decode bytes of SWF 
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, on_swfLoaded); 

同时还提供了解码完成的处理函数...

function on_swfLoaded (evt:Event) : void 
{ 
    var ExtSWF : MovieClip = new MovieClip; 
    ldr.contentLoaderInfo.removeEventListener(Event.COMPLETE, on_swfLoaded); 
    ExtSWF = ldr.content as MovieClip; 

    trace(ExtSWF); 
    ExtSWF.x =50; ExtSWF.y = 50; addChild(ExtSWF); 
} 
+0

尼斯。谢谢。有用 ) –