使用[frame()]数据标签制作的纯AS preLoader

 

2010-03-23 16:20

原理的话就是使用[frame()]标签,改变文档类指向。具体操作大家可以去网路上查一下,这方面资料很多,我这里只将源码贴出来,和大家一同分享。

代码
1 默认程序入口:
2
3  package
4 {
5  import flash.display.Sprite;
6  import mx.core.BitmapAsset;
7
8 [Frame(factoryClass="SystemManager",label="hello")]
9
10 public class MyApplication extends Sprite {
11
12 [Embed(source="test.png")]
13 private var bigPicCls:Class;
14
15 public function MyApplication() {
16 var b:BitmapAsset = new bigPicCls() as BitmapAsset;
17 addChild(b);
18 }
19 }
20 }
21
22

 

代码
1 被指向的主文档类:
2
3 package {
4 import flash.display.DisplayObject;
5 import flash.display.MovieClip;
6 import flash.display.StageAlign;
7 import flash.display.StageScaleMode;
8 import flash.events.Event;
9 import flash.events.ProgressEvent;
10 import flash.utils.getDefinitionByName;
11
12 public class SystemManager extends MovieClip
13 {
14 private var preLoader:PreLoader;
15
16 public function SystemManager() {
17 stage.scaleMode = StageScaleMode.NO_SCALE;
18 stage.align = StageAlign.TOP_LEFT;
19
20 stop();
21
22 preLoader = new PreLoader();
23 addChild(preLoader);
24
25 preLoader.x = stage.stageWidth/2 - preLoader.width/2;
26 preLoader.x = stage.stageHeight/2 - preLoader.height/2;
27
28 loaderInfo.addEventListener(ProgressEvent.PROGRESS,progressHandle);
29 loaderInfo.addEventListener(Event.COMPLETE,completeHandler);
30 }
31
32 private function progressHandle(e:ProgressEvent):void
33 {
34 preLoader.setProgress(e.bytesLoaded,e.bytesTotal);
35 }
36
37 private function completeHandler(e:Event):void {
38 loaderInfo.removeEventListener(ProgressEvent.PROGRESS,progressHandle);
39 loaderInfo.removeEventListener(Event.COMPLETE,completeHandler);
40
41 removeChild(preLoader);
42 preLoader = null;
43
44 nextFrame();
45
46 initApplication();
47 }
48
49 private function initApplication():void {
50 /**这里不能直接写成:
51 var app:Application = new Application();
52 这样的由于引用到 Application,Application中所有的资源都会被编译到第一帧来
53 这样的话 PreLoader就没有意义了,你也看不到PreLoader,就跳到第二帧了
54 **/
55 var appCls:Class = getDefinitionByName("MyApplication") as Class;
56 var app:DisplayObject = new appCls() as DisplayObject;
57 addChild(app);
58 }
59 }
60 }
61
62
代码
1 进度条:
2
3 package
4 {
5 import flash.display.Sprite;
6 import flash.text.TextField;
7
8 public class PreLoader extends Sprite
9 {
10 public function PreLoader()
11 {
12 var t:TextField = new TextField();
13 t.border = true;
14 t.text = "loading......";
15
16 addChild(t);
17 }
18
19 public function setProgress(loaded:uint,total:uint):void
20 {
21 var t:TextField = getChildAt(0) as TextField;
22 t.text = "load: "+ loaded/1000 + "/" + total/1000;
23
24 trace("load: "+ loaded/1000 + "/" + total/1000);
25 }
26 }
27 }
28

 

posted @ 2010-05-31 10:27  硕气书生  Views(411)  Comments(0Edit  收藏  举报