关于ActionScript Project中Preloader的解决

在使用Flex建立as的Project后,总是会希望显示出加载的进度,用loaderInfo的ProgressEvent来监听是不成功的,那么可参照以下方法,来实现AS应用的两桢法。

首先,建立了一个ImageGrallery的Project,其中包括ImageGrallery.as与AdPlayer.as。

然后,修改当前应用的Compiler,在其中添入“-frames.frame ImageGallery ImageGallery -generate-frame-loader=true”,(About the application compiler options)。

接着,目标是希望AdPlay能加载ImageGrallery,AdPlayer的代码如下:

package
{
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.utils.getDefinitionByName;
 
	public class AdPlayer extends MovieClip
	{
		private var preText: TextField;
		public function AdPlayer()
		{
			stop();
 
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
 
			preText = new TextField();
			addChild(preText);
 
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
 
		public function onEnterFrame(event:Event):void
		{
			graphics.clear();
 
			if (framesLoaded == totalFrames) {
				removeEventListener(Event.ENTER_FRAME, onEnterFrame);
				removeChild(preText);
				preText = null;
				nextFrame();
				onInit();
			} else {
				var percent: Number = root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal;
 
				preText.textColor = 0xFFFFFF;
				preText.text = (percent * 100).toFixed() + " %";
 
				preText.x = (stage.stageWidth * percent - preText.textWidth) / 2;
				preText.y = (stage.stageHeight - preText.textHeight) / 2;
 
				graphics.beginFill(0);
				graphics.drawRect(0, stage.stageHeight / 2 - 10, stage.stageWidth * percent, 20);
				graphics.endFill();
			}
		}
 
		private function onInit() : void {
			var playerClass: Class = Class(getDefinitionByName("ImageGallery"));
			if (playerClass) {
				var playerInstance: Object = new playerClass();
				addChild(playerInstance as DisplayObject);
			}
		}
	}
}

设置AdPlayer.as为Default Application,运行后,嘿嘿,OK了。(运行

注:如果想用ImageGrallery为主应用程序,那么ImageGrallery的程序可以如下:

package
{
	import com.biztv.player.PlayerContext;
 
	import flash.display.Sprite;
	import flash.events.Event;
 
	[Frame(factoryClass="AdPlayer")] // 此处为关键
	public class ImageGallery extends Sprite
	{
		protected var context: PlayerContext;
 
		public function ImageGallery()
		{
			addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
		}
 
		private function onAddedToStage(event: Event):void {
			removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);		
			initialize(this);
		}
 
		public function initialize(own: Sprite=null):void {
			removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
 
			context = new PlayerContext(own); // 此处使用robotlegs框架
		}
	}
}

Leave a Reply

Your email address will not be published. Required fields are marked *

*