小弟不才,最近才得知dispatchEvent的用法,這是傳送事件的一種方式。我之前都是直接把外部類別檔中的"function" "public",讓主程式可以抓取類別去改變一些參數進而達成目的,這次就做個小筆記來消化一下傳送事件這種方式吧。
在Main中 我new了類別檔test 並先在Main中新增一個類別偵聽事件
testDispatchEvent(main中的名稱)
addEventListener(偵聽事件)
test(類別名稱)
statmentString(類別中的dispatchEvent)
receiveEvent(main新增function)
並addChild test類別中的box,在test類別裡敘述,當在舞台新增box物件將會觸發ispatchEvent(new Event(statmentString)) 當我新增偵聽事件執行後,此程式執行結果將會印出ok接著印出read。
總而言之 流程就是 stage 上 有了 box偵聽事件 ,test_class就會觸發dispatchEvent 呼叫 main中的receive function接著在add box至舞台 進而印出ok。
這就是以事件方式傳送訊息的寫法~~程式之間的溝通,當然用舊方法也無仿囉,看各位寫程式的喜好。
範例中有兩個檔案 一個是主程式Main 一個是 test
在Main中 我new了類別檔test 並先在Main中新增一個類別偵聽事件
testDispatchEvent(main中的名稱)
addEventListener(偵聽事件)
test(類別名稱)
statmentString(類別中的dispatchEvent)
receiveEvent(main新增function)
並addChild test類別中的box,在test類別裡敘述,當在舞台新增box物件將會觸發ispatchEvent(new Event(statmentString)) 當我新增偵聽事件執行後,此程式執行結果將會印出ok接著印出read。
總而言之 流程就是 stage 上 有了 box偵聽事件 ,test_class就會觸發dispatchEvent 呼叫 main中的receive function接著在add box至舞台 進而印出ok。
這就是以事件方式傳送訊息的寫法~~程式之間的溝通,當然用舊方法也無仿囉,看各位寫程式的喜好。
private var testDispatchEvent:test = new test();
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
testDispatchEvent.addEventListener(test.statmentString, receiveEvent);
addChild(testDispatchEvent.box);
}
private function receiveEvent(e:Event):void
{
trace("ok");
}
}
test類別
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.EventDispatcher;
/**
* ...
* @author egg
*/
public class test extends EventDispatcher
{
public static const statmentString:String = "statementString";
public var box:MovieClip = new MovieClip();
public function test()
{
box.addEventListener(Event.ADDED_TO_STAGE, ClassDoAndSendDispatchEvent);
}
private function ClassDoAndSendDispatchEvent(e:Event):void
{
dispatchEvent(new Event(statmentString));
trace("read");
}
}
}
留言