zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    HDU 1317 XYZZY(floyd+bellman_ford判环)
    UVa 10791 最小公倍数的最小和(唯一分解定理)
    UVa 12169 不爽的裁判
    UVa 11582 巨大的斐波那契数!(幂取模)
    POJ 1142 Smith Numbers(分治法+质因数分解)
    HDU 1595 find the longest of the shortest
    UVa 11090 在环中
    UVa 10917 林中漫步
    UVa 11374 机场快线
    POJ 1503 Integer Inquiry
  • 原文地址:https://www.cnblogs.com/appleseed/p/1382226.html
Copyright © 2011-2022 走看看