<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" click="loadpic()"> <mx:Script> <![CDATA[ //导入需要的类包 import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; //声明Loader类 private var pictLdr:flash.display.Loader = new Loader(); //声明资源所在的位置,以字符串形势出现。 private var pictURL:String = "C:/Documents and Settings/Administrator/桌面/Flash/bernhardwolff.swf"; //声明URLRequest对象 private var pictURLReq:URLRequest = new URLRequest(pictURL); //声明Sprite实例为容器 private var container:Sprite = new Sprite(); //加载图片函数 private function loadpic():void { //通过Load加载图片 pictLdr.load(pictURLReq); //将容器添加在舞台上 this.stage.addChild(container); //添加监听事件,当加载内容结束后调用事件。 pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE,imgLoaded); } //加载结束后调用的函数 private function imgLoaded(e:Event):void { //将图片添加到Sprite容器中 this.container.addChild(this.pictLdr.content); } ]]> </mx:Script> </mx:Application>
知识备忘:
相关知识说明: Loader 类可用于加载 SWF 文件或图像(JPG、PNG 或 GIF)文件。 使用 load() 方法来启动加载。 被加载的显示对象将作为 Loader 对象的子级添加。 使用 URLLoader 类加载文本或二进制数据。 使用Load类时,我们还应该特别了解 Flash Player安全模型。
1、您可以加载来自任何可访问源的内容。
2、如果执行调用的 SWF 文件位于网络沙箱中并且要加载的文件是本地的,则不允许加载。
备注:什么是网络沙箱?
概述沙箱处理是一个通用安全性术语,它适用于所有降低某应用程序运行特权的环境。它对于从 Internet 下载的沙箱应用程序尤为重要,因为这些应用程序往往来源不明或不可信。
举例说明:见文章:http://cs1022.spaces.live.com/blog/cns!34345A50FF5F1AC1!192.entry
3、如果加载的内容为用 ActionScript 3.0 编写的 SWF 文件,那么除非可以通过调用加载的内容文件中的 System.allowDomain() 或 System.allowInsecureDomain() 方法来允许跨脚本排列,否则另一个安全沙箱中的 SWF 文件不能对它执行跨脚本操作。
4、如果被加载的内容为 AVM1 SWF 文件(用 ActionScript 1.0 或 2.0 编写),则 AVM2 SWF 文件(用 ActionScript 3.0 编写)不能对它执行跨脚本操作。 但是,可以通过使用 LocalConnection 类在两个 SWF 文件之间实现通信。
5、如果被加载的内容为图像,则除非该 SWF 文件的域包含在该图像原始域的跨域策略文件中,否则安全沙箱之外的 SWF 文件无法访问其数据。
6、在只能与本地文件系统的内容交互的沙箱中的影片剪辑不能对只能与远程内容交互的沙箱中的影片剪辑使用脚本,反之亦然。
解决的办法: 当从不受信任的源(如除 Loader 对象的根 SWF 文件以外的域)加载 SWF 文件时,您可能需要为 Loader 对象定义蒙版,以防止将加载的内容(Loader 对象的子级)绘画到该蒙版之外的舞台部分中。
如以下代码所示:
import flash.display.*; import flash.net.URLRequest; var rect:Shape = new Shape(); rect.graphics.beginFill(0xFFFFFF); rect.graphics.drawRect(0, 0, 100, 100); rect.graphics.endFill(); addChild(rect); var ldr:Loader = new Loader(); ldr.mask = rect; var url:String = "http://www.unknown.example.com/content.swf"; var urlReq:URLRequest = new URLRequest(url); ldr.load(urlReq); addChild(ldr);
练习过程中发现的问题说明:
在我做的过程中,发现BUG信息:
ArgumentError: Error #2025: 提供的 DisplayObject 必须是调用者的子级。
因为我是初学,所以,发现问题只能寻求BaiDu、Google的帮助,网上给的答案中我认为最靠谱的是:删除了不存在的对象,我觉得这个答案有点靠谱。但是,从帮助上看,我觉得应该是:Loader 类会覆盖其继承的以下方法,因为 Loader 对象只能有一个子显示对象 -- 其加载的显示对象。调用以下方法将引发异常:addChild()、addChildAt()、removeChild()、removeChildAt() 和 setChildIndex()。 要删除被加载的显示对象,必须从其父 DisplayObjectContainer 子级数组中删除 Loader 对象。