AS3最好用的就是新的事件流
而且可以使用氣泡事件的方法, 一路往上打, 非常的好用
不要再寫像是AS2的 parent.parent.parent.gotoAndPlay(2)了
假設場景結構如下
Stage MainTimeline Loader(載入Child.swf)
當Child.swf裡的按鈕被按下時, 主時間要開始播放
可以用類似AS2的寫法是 MovieClip(parent.parent).gotoAndPlay(2);
AS3,可以叫Child.swf發送氣泡事件往上層打, 一路的可視可件都可以偵聽的到。
如果想要發事件時, 一起帶個參數出去
可以寫個 get 的屬性, 透過偵聽者函式 e.target即可得到發出事件者
或是可以發送一個客製化的事件, 就不需要寫 get 屬性。
Child.swf Child.as
該swf上有二個按鈕, 名稱為:btn_mc , btn2_mc
CustomEvent.as
主檔:Main.swf Main.as
這樣就可以完成二個不同的.swf檔, 發送事件並加送參數, 相當的好用
而且可以使用氣泡事件的方法, 一路往上打, 非常的好用
不要再寫像是AS2的 parent.parent.parent.gotoAndPlay(2)了
假設場景結構如下
Stage MainTimeline Loader(載入Child.swf)
當Child.swf裡的按鈕被按下時, 主時間要開始播放
可以用類似AS2的寫法是 MovieClip(parent.parent).gotoAndPlay(2);
AS3,可以叫Child.swf發送氣泡事件往上層打, 一路的可視可件都可以偵聽的到。
如果想要發事件時, 一起帶個參數出去
可以寫個 get 的屬性, 透過偵聽者函式 e.target即可得到發出事件者
或是可以發送一個客製化的事件, 就不需要寫 get 屬性。
Child.swf Child.as
該swf上有二個按鈕, 名稱為:btn_mc , btn2_mc
package { import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import milkmidi.CustomEvent; /** * ... * @author milkmidi */ public class Child extends Sprite { public var btn_mc :MovieClip; public var btn2_mc :MovieClip; private var _msg :String = "我是Child.swf的變數"; public function Child() { btn_mc.buttonMode = true; btn_mc.addEventListener(MouseEvent.CLICK , _btnClickHandler); btn2_mc.buttonMode = true; btn2_mc.addEventListener(MouseEvent.CLICK , _btn2ClickHandler); } private function _btnClickHandler(e:MouseEvent):void { //發送氣泡事件, 事件名稱為:ChildEvent, trace('Child.swf 發送 dispatchEvent(new Event( "ChildEvent" , true))') dispatchEvent(new Event( "ChildEvent" , true)); } private function _btn2ClickHandler(e:MouseEvent):void { trace('Child.swf 發送 dispatchEvent(new CustomEvent(CustomEvent.CHILD_EVENT , true))') dispatchEvent(new CustomEvent( CustomEvent.CHILD_EVENT , true , "CustomEvent 並加送參數")); } public function get msg():String { return _msg; } } }
CustomEvent.as
package milkmidi{ import flash.events.Event; public class CustomEvent extends Event { public static const CHILD_EVENT:String = "childEvent"; public var msg:String; public function CustomEvent(pType:String, pBubble:Boolean = false , pMsg:String = "") { super(pType, pBubble, false); msg = pMsg; } public override function toString():String { return formatToString("CustomEvent", "type", "msg"); } } }
主檔:Main.swf Main.as
package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import milkmidi.CustomEvent; /** * ... * @author milkmidi */ public class Main extends Sprite { private var _ldr:Loader; public function Main() { _ldr = new Loader(); _ldr.addEventListener("ChildEvent" , _childEventHandler); _ldr.addEventListener(CustomEvent.CHILD_EVENT , _customEventHandler); _ldr.load(new URLRequest("Child.swf")); addChild(_ldr); } private function _customEventHandler(e:CustomEvent):void { trace(e); trace(e.msg); //在偵聽CustomEvent,可以一起發送參數, 這樣就不需要在發送物件者寫一個 get 屬性。 } private function _childEventHandler(e:Event):void { trace(e.currentTarget , e.target); //e.currentTarget 得到一開始注冊的物件, 也就是 _ldr //e.target 得到真正送出事件的物件, 也就是 Child.swf trace(e.target.msg); //該物件有個 msg 的 get 屬性 //即可得到該變數 } } }SourceCodeDownload
這樣就可以完成二個不同的.swf檔, 發送事件並加送參數, 相當的好用
留言
這三個參數寫的都還滿仔細的
如果記得沒錯的話是這樣
感謝提供的資訊,這就來去試試