思路就是使用[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);
}
}
}
?