思路就是使用[Frame(factoryClass="标签")]
Frame元数据标签在FlashBuilder4.6里面 alt+/ 没有这个提示 但是手工打上去的话 运行是没有问题的
现在拿两个类做测试 Preloader类 和 主程序类 Basic_Lesson_1
[Frame]元数据标签 网上介绍是主文档类的重定向 也就是运行项目的时候 会先运行 [Frame(facotryClass="全限定类
名")]
会转到factoryClass指向的这个类 在这个类里面 进行Preloader的显示和进度操作
package { import ascb.drawing.Pen; import com.bless.container.Box; import flash.display.Shape; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.ProgressEvent; [Frame(factoryClass="com.bless.container.Preloader")] public class basic_lesson_1 extends Sprite { public function basic_lesson_1() { addChild(drawCircle()); trace("numChildren"+numChildren); trace("numChildren"+numChildren); trace("this:"+this); } /** * 画一个小圆圈 * @return */ public function drawCircle(showBorder:Boolean=true):Shape { var circle:Shape = new Shape(); if(showBorder){ circle.graphics.lineStyle(1,0x7FAAFF,1); } circle.graphics.beginFill(0xAAFF7F,0.5); circle.graphics.drawCircle(50,50,50); circle.graphics.endFill(); return circle; } } }
下面是preloader类 这个类继承了 MovieClip使用这个类的nextFrame方法 或者gotoAndPlay(2)来切换到下一帧 这样就可以执行原主程序中的逻辑了
下面的这句代码必须要这样写 用getDefinitionByName来进行类的导入 如果直接var app:YourApplication这样的话 原先的主程序就会在第一帧里面执行了 预加载的类就没有意义了
var basic:Class = getDefinitionByName("basic_lesson_1") as Class;
package com.bless.container { import flash.display.DisplayObject; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.utils.getDefinitionByName; public class Preloader extends MovieClip { public function Preloader() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; super(); trace("OK"); loaderInfo.addEventListener(Event.COMPLETE,completeHandler); } public function completeHandler(event:Event):void { gotoAndPlay(2); // nextFrame(); initApp(); } public function initApp():void { var basic:Class = getDefinitionByName("basic_lesson_1") as Class; var myApp:DisplayObject = new basic() as DisplayObject; addChild(myApp); } } }