今天我们来看一下我们在实际应用中经常要用到的关于加载方面的类:
Loader类:
Loader 类可用于加载 SWF 文件或图像(JPG、PNG 或 GIF)文件。
这是我们经常要用到的一些操作,比如我们做个图片浏览器,那么就需要加载一些JPG之类的图像文件(如果说我们把这个图像文件导入到库中,那会使文件变得很大,最重要的是会失去程序的灵活性,那些图片是死的,要改的话又要去导入图片到库);我们也会去做一个SWF作为框架,然后把各个独立的功能做成单独的SWF通过那个加载进去,比如说做游戏,我们做一个游戏大厅(这个就是框架),然后各个游戏通过大厅来加载,这样我们也可以用这个类来加载SWF。
我们先来看看加载swf文件,先看一段代码:
首先建一个被加载的文件(subLoader.fla),建一个比较简单的文档类(SubMainForm.as):
import flash.display.Sprite;
public class SubMainForm extends Sprite{
public function SubMainForm(): void {
}
}
}
这个类中什么没做,可以在场景中随便画一点东西,不然里面看不到效果。
再来建一个加载的文件(MainLoader.fla).也建一个文档类(MainForm.as):
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;
public class MainForm extends Sprite{
private var subLoader:Loader;
public function MainForm(): void {
subLoader = new Loader();
subLoader.load( new URLRequest( " SubLoader.swf " ));
subLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
subLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
}
private function progressHandler(event:ProgressEvent): void {
trace( " 文件已经加载: " + event.bytesLoaded + " 字节 " );
trace( " 文件总大小为: " + event.bytesTotal + " 字节 " );
}
private function completeHandler(event:Event): void {
trace( " 文件已经加载完成 " );
addChild(subLoader);
}
}
}
在MainForm中有一个Loader实例,Loader用load来加载我们所要的文件,路径可以是相对的也可以是绝对的,我们这里用的是相对坐标,如果是绝对坐标,就是“http://....”这样的形式,不管是什么都是网络上的路径,所以这个用了一个new URLRequest(),这个类可以捕获http的信息,这个是必须的。在这里,我们侦听了两个事件,Event.COMPLETE是完成,就是加载完成触发的,ProgressEvent.PROGRESS是处理加载进度,这两个事件是经常用到的,当然还会有一些其它的事件,大家在帮助中可以看到。
我们刚才通过外层的SWF向里层的SWF传递参数(2.0中我们通常是里层的去取外层的_root变量),修改这两段代码:
import flash.display.Sprite;
public class SubMainForm extends Sprite{
public function SubMainForm(): void {
}
public function getMainParam(param:String){
trace( " 得到从外层来的参数: " ,param);
}
}
}
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;
public class MainForm extends Sprite{
private var subLoader:Loader;
public function MainForm(): void {
subLoader = new Loader();
subLoader.load( new URLRequest( " SubLoader.swf " ));
subLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
subLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
}
private function progressHandler(event:ProgressEvent): void {
trace( " 文件已经加载: " + event.bytesLoaded + " 字节 " );
trace( " 文件总大小为: " + event.bytesTotal + " 字节 " );
}
private function completeHandler(event:Event): void {
trace( " 文件已经加载完成 " );
addChild(subLoader);
event.currentTarget.content.getMainParam( " 你好 " );
}
}
}
我们可以看到通过event.currentTarget.content可以调用里层的公共方法。event.currentTarget.content实际上就是加载进来的那个SWF。
加载图像文件的方法也是跟这一样的。
下节继续!
(本教程如需转载请注明出处!)