flex中dispatchEvent的用法(自定義事件) .


Evevt和EventDispatcher類在as3的事件機制中是很重要的角色,dispatchEvent()是EventDispatcher類的一個事件發送方法,它可以發送出Event類或其子類的實例,在as3中所有的顯示對象都可以發送事件,因為as3中所有的顯示對象都是EventDispatcher子類DisplayObject的實例。

   發送事件有三種方式:繼承EventDispatcher,如sprite等顯示對象、復合EventDispatcher或其子類、實現IEventDispatcher接口。

   個人認為復合EventDispatcher在實際應用中用的比較多,沒有找到合適例子,自己寫了一個很簡單的,僅供參考,為了演示把簡單的問題復雜話了,首先畫一個矩形,點擊矩形后發送一個事件,矩形接收事件后alpha變為0;

自定義事件:

package{
   import flash.events.Event;

   public class MyEvent extends Event{
         public static const ALPHA:String = "alpha";
            public function MyEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false){
            super(type, bubbles, cancelable);
            }
      }
}



package{
import flash.display.Sprite;

public class Sample extends Sprite{
       public function Sample(){
         this.graphics.beginFill(0xff6600);
         this.graphics.drawRect(50,50,100,50);
         this.graphics.endFill();
         this.addEventListener(MyEvent.ALPHA,blackHandler);
   }
   private function blackHandler(evt:MyEvent){
         this.alpha = 0;
   }
}
}

主類:

package{
   import flash.display.Sprite;
   import flash.events.MouseEvent;

   public class Main extends Sprite{
             private var sample:Sample;
             public function Main(){
            sample = new Sample();

            //注冊事件偵聽器
            sample.addEventListener(MouseEvent.CLICK,clickHandler);
            addChild(sample);
       }
       private function clickHandler(evt:MouseEvent){

             //發送事件
            sample.dispatchEvent(new MyEvent(MyEvent.ALPHA));
       }
    }
}

注:在as3中只有事件的發送者才能偵聽事件。在Main類中sample實例發送的事件也只有sample注冊的偵聽器才能偵聽,在Sample中的this正是指向了sample。

這個例子很簡單,只是為了展示事件的發送接收,你還可以擴展自定義的Event類,帶上你想發送的參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM