ActionScript3.0事件機制非常的完善
透過偵聽函式即可以得知廣播者發出的事件。
我們希望發件事件時, 能一起把自定的參數也發送出去
這時候就要自定一個類別來繼承Event。
自定一個名為LoaderEvent的類別。
定義靜態常數字串。
新增一個名為LoaderX類別繼承Loader
要偵聽Loader物件時
以前要寫
Loader實體.contentLoaderInfo.addEventListener(Event.COMPLETE,偵聽函式);
現在改成:
LoaderX實體.addEventListener(LoaderEvent.LOADER_COMPLETE,偵聽函式);
這樣就可以不需要再多打一個contentLoaderInfo
同時在偵聽事件時, 能再多接收參數。
SourceCodeDownload
透過偵聽函式即可以得知廣播者發出的事件。
我們希望發件事件時, 能一起把自定的參數也發送出去
這時候就要自定一個類別來繼承Event。
自定一個名為LoaderEvent的類別。
定義靜態常數字串。
package milkmidi.events{ import flash.events.Event; public class LoaderEvent extends Event { public static const LOADER_COMPLETE :String = "loaderComplete"; public static const LOADER_PROGRESS :String = "loaderProgress"; public static const LOADER_ERROR :String = "loaderError"; public var percentage:Number = 0; public function LoaderEvent(p_type:String , p_percentage:Number = 0) { super( p_type ); this.percentage = p_percentage; } } }
新增一個名為LoaderX類別繼承Loader
package milkmidi.display{ import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest; import flash.system.LoaderContext; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import milkmidi.events.LoaderEvent; public class LoaderX extends Loader { public function LoaderX() { super(); this.contentLoaderInfo.addEventListener(Event.COMPLETE, _innerOnComplete, false, 0, true); this.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, _innerOnProgress, false, 0, true); this.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, _innerOnIOError, false, 0, true); } override public function load(p_url:URLRequest, p_context:LoaderContext = null):void { throw new Error("EEEEEEERRRORROOROROR"); } public function loadURL(p_url:String, p_context:LoaderContext = null):void { super.load(new URLRequest(p_url), p_context); } private function _innerOnComplete(e:Event): void { this.dispatchEvent(new LoaderEvent(LoaderEvent.LOADER_COMPLETE)); //載入完成時, 發送自定的LoaderEvent.LOADER_COMPLETE事件。 } private function _innerOnProgress(e:ProgressEvent):void{ var percentage:int = int(e.bytesLoaded / e.bytesTotal * 100); this.dispatchEvent(new LoaderEvent(LoaderEvent.LOADER_PROGRESS, percentage)); //載入進行中, 發送自定的LoaderEvent.LOADER_PROGRESS事件。 //發發事件時, 也把參數percentage發送出去。 } private function _innerOnIOError(e:IOErrorEvent):void{ this.dispatchEvent(new LoaderEvent(LoaderEvent.LOADER_ERROR)); } } }測試:
package { import flash.display.Sprite; import milkmidi.display.LoaderX; import milkmidi.events.LoaderEvent; public class Demo extends Sprite{ private var _ldr:LoaderX; public function Demo() { _ldr = new LoaderX(); _ldr.addEventListener(LoaderEvent.LOADER_COMPLETE, onLoaderComplete); _ldr.addEventListener(LoaderEvent.LOADER_PROGRESS, onLoaderProgress); //因為我們自定的LoaderX是繼承Loader, 擁有Loader類別所有的方法和屬性。 //同時我們擴充該類別, 讓他會發出LoaderEvent事件, 所以要改為偵聽LoaderEvent事件。 _ldr.loadURL("demo.jpg"); this.addChild(_ldr); } private function onLoaderComplete(e:LoaderEvent):void { trace(e); } private function onLoaderProgress(e:LoaderEvent):void { trace(e.percentage); //接收到事件時, e物件會有percentage屬性。 //直接就是載入的百入比值。 } } }建構一個LoaderX物件,來取代Loader
要偵聽Loader物件時
以前要寫
Loader實體.contentLoaderInfo.addEventListener(Event.COMPLETE,偵聽函式);
現在改成:
LoaderX實體.addEventListener(LoaderEvent.LOADER_COMPLETE,偵聽函式);
這樣就可以不需要再多打一個contentLoaderInfo
同時在偵聽事件時, 能再多接收參數。
SourceCodeDownload
留言
現在的AS3.0的資料好少,買來的書也沒有類似的教學...3.0跟以前的語法差好多...真的看不懂...
不知道老師能不能教我呢?
我想做一個類似這樣網頁的紙娃娃FLASH,用AS3.0寫,
http://img.roiworld.com/data
/roigame/our/swf/ou024.swf
想做的是衣服可以自動卡位,
也可以讓使用者把自己設計的衣服上傳來放,
懇求給老師恩賜一個簡單的FLA+教學方向讓我去做>"<