给ActionScript项目添加preloader

思路就是使用[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);
		}
	}
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值