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檔, 發送事件並加送參數, 相當的好用
留言
這三個參數寫的都還滿仔細的
如果記得沒錯的話是這樣
感謝提供的資訊,這就來去試試