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

本文介绍如何使用[Frame]元数据标签实现Flash项目的预加载功能。通过将Preloader类指定为初始加载类,可以在主程序完全加载前显示加载进度。文章还展示了如何利用getDefinitionByName动态创建主程序实例。

145

被折叠的 条评论
为什么被折叠?



