跳到主要內容

AS3.0 dispatchEvent

小弟不才,最近才得知dispatchEvent的用法,這是傳送事件的一種方式。我之前都是直接把外部類別檔中的"function" "public",讓主程式可以抓取類別去改變一些參數進而達成目的,這次就做個小筆記來消化一下傳送事件這種方式吧。

範例中有兩個檔案 一個是主程式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");
  }
 }
}

留言