当SWFLoader外部加载SWF时一切都很简单,可以直接通过SWFLoader实例的content属性获取加载的SWF相关的主类Sprite/MovieClip实例。
<s:SWFLoader id="swfLoader" source="@Embed(source=‘assets/xxx.swf‘)" />
但当SWFLoader如上所示,source属性使用@Embed标签嵌入swf时,该SWFLoader的content就不再是swf本身所代表的Sprite或MovieClip了,而是一个MovieClipLoaderAsset类的子类实例,源代码如下
package xxx.xxx { import mx.core.MovieClipLoaderAsset; import flash.utils.ByteArray; public class main__embed_mxml_assets_xxx_swf_666811031 extends MovieClipLoaderAsset { public function main__embed_mxml_assets_xxx_swf_666811031() { super(); initialWidth=11000/20; initialHeight=8000/20; } private static var bytes:ByteArray = null; override public function get movieClipData():ByteArray { if (bytes == null) { bytes = ByteArray( new dataClass() ); } return bytes; } [Embed(_resolvedSource=‘X:/xxx/xxx.swf(swf在硬盘上的绝对路径)‘, mimeType=‘application/octet-stream‘)] public var dataClass:Class; } }
由上可见,该MovieClipLoaderAsset子类实例有一个名为dataClass的Class类型的public变量,使用Embed标签嵌入了swf(作为二进制数据ByteArray)
[Embed(_resolvedSource=‘X:/xxx/xxx.swf(swf在硬盘上的绝对路径)‘, mimeType=‘application/octet-stream‘)] public var dataClass:Class;
可以通过名为movieClipData的getter获取swf的ByteArray。
另外MovieClipLoaderAsset类实例还有一个私有的loader:Loader变量
private var loader:Loader
该loader加载了嵌入的swf,并作为MovieClipLoaderAsset子类实例的唯一子项添加到了其显示列表中
也就是说swfLoader.content.getChildAt(0) as Loader,即可得到该私有变量loader,
这个loader.content才是嵌入swf相关的主类Sprite/MovieClip
原文地址:http://cstar.blog.51cto.com/2923639/1620040