当前位置: 代码迷 >> Web前端 >> 给ActionScript项目增添preloader
  详细解决方案

给ActionScript项目增添preloader

热度:191   发布时间:2012-08-07 14:54:48.0
给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);
		}
	}
}
?
  相关解决方案