在使用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框架 } } }