Skip to main content

Posts

Showing posts from June, 2009

[ AS3] 簡單講客製 Event

很多人從 AS2 轉 AS3 後,還是習慣照用 MovieClip(root) 之類的寫法,但其實 AS3 的 Event 機制提供了一個良好的環境讓你脫離兒子物件直接控制老爸物件 (如同 MovieClip 中寫 _root.去做啥())。這就是工程師最愛講的:loose coupling (鬆耦)

在 AS3 中,所有的 DisplayObject 都繼承自 EventDispatcher,所以它們可以收聽跟發送 Event。

以下是一個簡單的範例講解客製 AS3 Event 應用...

情況解說:主stage a.swf 載入 b.swf ,當點選 b.swf 內的按鈕須要通知 a.swf gotoAndPlay("labelA")。如果你沿用 AS2 寫作邏輯,你一定會在 b.swf 內的按鈕寫上:
btn.addEventListener( MouseEvent.CLICK , onClick );
function onClick(e:Event):void{
// 不管怎樣就是只能控制 [MainTimeline] 去 gotoAndStop("labelA")
MovieClip( parent.root ).gotoAndStop("labelA");
}
又或者將控制動作寫在 a.swf 內:
var ldr:Loader = new Loader;
ldr.contentLoaderInfo.addEventListener( Event.COMPLETE , onLoaded );
ldr.load( new URLRequest ( "b.swf" ) );

function onLoaded(e:Event):void{
var mc:MovieClip = ldr.content as MovieClip;
addChild(mc);
//喔喔將 b.swf 的 btn 一併綁進來了喔!所以按鈕絕對不能亂改名喔,也不能改階層
mc.btn.addEventListener( Event.CLICK , onClick);
}

function onClick(e:Event):void{
gotoAndStop("labelA&q…