小小菜鸟的web菜园子

web开发学习。好记性不如烂笔头。每天进步一点点!

导航

菜鸟讲解as3自定义事件,类间通信.

自己搞这个的时候研究了半天..比较菜.

最近不少朋友问我,就写一下吧.

仅供菜鸟,小鸟参考.

转载请注明哇哦~小小菜鸟的WEB菜园子

 

首先我们定义一个简单的类myClip

 1 package {
 2     import flash.display.Sprite;
 3     public class myClip extends Sprite {
 4         public function myClip() {
 5             addEventListener(MouseEvent.CLICK,clickHander);
 6         }
 7         private function clickHander(evt:MouseEvent):void {
 8             trace("click");
 9         }
10     }
11 }

 

这个类很简单,只要我们在舞台创建一个影片剪辑,把他的  连接属性 中的类 设置为myClip , 单击这个影片剪辑就可以输出一个click.

 

如何让我们的这个影片剪辑被单击的时候可以执行舞台上的一个函数,比如function listen_clipEvent() 呢?

这个时候就需要用我们舞台上的这个函数监听myClip的事件了。

 

转载请注明哇哦~小小菜鸟的WEB菜园子 

 

既然要监听myClip的事件,我们就创建一个myClip的事件类:clipEvent

 

 1 package {
 2     import flash.events.Event;
 3     public class clipEvent extends Event {
 4         public static const CLIP_CLICK:String="clip_click";
 5         private var _mm:String;
 6         public function clipEvent() {
 7             super(CLIP_CLICK);
 8         }
 9         public function get M() {
10             return _mm;
11         }
12         public function set M(a:String) {
13             _mm=a;
14         }
15     }
16 }

 

第2行我们引入了Event类,为了集成它用.

第4行我们定义了事件类的一个类型,你是可以自定随便定义的哦,就相当于MouseEvent的CLICK.

然后在第5行定义我们自定义事件的一个属性,通过这个属性就可以访问触发事件类的某些属性了,比如event.targe,这是系统定义的.

第7行我们在构造函数中定义了CLIP_CLICK类型为默认类型。

9到14行是get,set方法就不说咯。

 

回到我们的自定义类,修改代码:

 

 1 package {
 2     import flash.display.Sprite;
 3     import flash.events.MouseEvent;
 4     import flash.events.EventDispatcher;
 5     public class myClip extends Sprite {
 6         public function myClip() {
 7             addEventListener(MouseEvent.CLICK,clickHander);
 8         }
 9         private function clickHander(evt:MouseEvent):void {
10             trace("click");
11             var _clipEvent:clipEvent=new clipEvent();
12             _clipEvent.M="wangyan";
13             dispatchEvent(_clipEvent);
14         }
15     }
16 }

 

我们添加了几行代码。

11行我们声明了一个自定义类的对象,12行对他的属性复制,你当然可以通过自定义类的属性给自定义事件的这个属性赋值,这个我们后面一节讲。

13行我们将我们的自定义事件调度到事件流中,只有这样才可以被监听哦。为了能将事件调度到事件流中,我们在第4行引入了EventDispatcher类。

 

好咯,回到主场景.

 

 

1 function listen_clipEvent(evt:clipEvent) {
2     trace("hello"+evt.M);
3 }
4 abc.addEventListener(clipEvent.CLIP_CLICK,listen_clipEvent);

我们在把主场景的函数做了修改,首先添加一个参数evt:clipEvent,因为,如果某个函数想监听一个事件,需要添加一个对象作为参数。

当然你可以在函数中访问自定义事件的属性。

abc是谁??它就是我们链接属性的 类被设成myClip的影片剪辑,那样他就继承了myClip,相当于myClip的一个对象了。

 

我们让listen_clipEvent自定义函数监听我们abc这个myClip类对象的CLIP_CLICK类型的clipEvent事件。这个是在第4行完成的。

 

好的,ctrl+回车。

 

是不是输出

click
hellowangyan

 

转载请注明哇哦~小小菜鸟的WEB菜园子

 

click是myClip类对象abc的单击事件发出的,而hellowangyan是我们的舞台上的监听abc对象的CLIP_CLICK类型的自定义clipEvent事件的函数listen_clipEvent发出的。

 

语言有点绕口,很简单的哦,稍微想一想。

后面我们再讲如何在舞台上给事件传递参数。

然后再再后面讲解还有如何让另外一个类的对象的方法监听我们myClip类的自定义事件clipEvent。

posted on 2008-08-14 00:48  『小小菜鸟』  阅读(5035)  评论(5编辑  收藏  举报