Flash as3事件学习
发布时间:2020-12-15 20:02:01 所属栏目:百科 来源:网络整理
导读:事件是什么? Event是一种反应机制,比如一个对象做了一件事(执行了某个函数),另一个对象就会对应的执行某个动作(某个函数)。 怎样才能达到上述效果呢?我们需要一个媒介来发送消息。 为什么需要事件? 1.一般我们先要达到通知消息的功能,都是用对象的外部
事件是什么?
Event是一种反应机制,比如一个对象做了一件事(执行了某个函数),另一个对象就会对应的执行某个动作(某个函数)。
怎样才能达到上述效果呢?我们需要一个媒介来发送消息。
|
addEventListener(type:String,listener:Function,useCapture:Boolean?= false,priority:int?= 0,useWeakReference:Boolean?= false):void
|
type是事件类型,
listener是函数对象,
useCapture是有关事件流的捕获,
priority是事件发生的优先级,
useWeakReference是事件的弱引用,设置为true的时候,当我们移出了对象,而没有移出对象那个的监听,系统会自动回收这个监听,如果社会为false,则不会回收,不过垃圾回收是有一定时间延迟的,一般我们都会在删除对象前,移除掉它身上的监听。
? ??
dispatchEvent(event:Event):Boolean
|
这个方法就是发送事件的方法。
hasEventListener(type:String):Boolean |
这两个方法都是检测对象有没有注册某事件类型的,不同的是willTrigger方法还会检测显示列表对象父级所有的侦听器。
移除帧听的方法。
自定义发送事件的三种方式
1.继承EventDispatcher类
? ? ?一般的自定义方式。
2.复合EventDispatcher对象
? ? ?当我们不仅仅把事件的发送类看做发送事件的类,而是其他类的时候,我们用复合。
3.实现IEventDispatcher接口
? ? ?当我们因为继承了其他类不能够继承EventDispatcher类的时候,我们实现接口。
具体的方法可以参考《ActionScript3.0殿堂之路》这本书,作者有详细的例子说明。
下面我们来自定义一个小明见到老王问好的事件。
自定义事件举例
TestEvent.as
package myEvent{ import flash.display.Sprite; public class TestEvent extends Sprite{ public function TestEvent(){ var xiaoming:XiaoMing = new XiaoMing(); var laowang:LaoWang = new LaoWang(); xiaoming.addEventListener(SayEvent.SAY_HELLO,laowang.replyEvent);//注册事件 xiaoming.addEventListener(SayEvent.SAY_GOODBYE,laowang.replyEvent); xiaoming.meetPeople();//发出事件 xiaoming.leavePeople(); xiaoming.removeEventListener(SayEvent.SAY_HELLO,laowang.replyEvent);//移除事件 xiaoming.removeEventListener(SayEvent.SAY_GOODBYE,laowang.replyEvent); /*var evt1:SayEvent = new SayEvent("say_goodbye"); evt1.books = ["1","2","3"]; var evt2 = evt1;//和clone()的对比 evt1 = null; trace(evt1); trace(evt2); xiaoming.dispatchEvent(evt2);*/ /* 输出: [object XiaoMing] say: Hello! c++从入门到放弃,php是最好的语言,我的编程笔记 [object XiaoMing] say: goodbye! c++从入门到放弃1,php是最好的语言1,我的编程笔记1 */ } } }
XiaoMing.as
package myEvent{ import flash.events.EventDispatcher; public class XiaoMing extends EventDispatcher{ private var sname:String; public function XiaoMing(sname:String="xiaoming"){ this.sname = sname; } public function meetPeople():void{ var sayHello:SayEvent = new SayEvent("say_hello"); sayHello.books = ["c++从入门到放弃","php是最好的语言","我的编程笔记"]; dispatchEvent(sayHello);//发送sayHello事件 } public function leavePeople():void{ var sayHello:SayEvent = new SayEvent("say_goodbye"); sayHello.books = ["c++从入门到放弃1","php是最好的语言1","我的编程笔记1"]; dispatchEvent(sayHello); } } }
LaoWang.as
package myEvent{ public class LaoWang{ public function replyEvent(evt:SayEvent):void{ if (evt.type == "say_hello"){ trace(evt.target+" say: Hello!"); }else{ trace(evt.target+" say: goodbye!"); } trace(evt.books); } } }
SayEvent.as
package myEvent{ import flash.events.Event; public class SayEvent extends Event{ public static const SAY_HELLO:String = "say_hello"; public static const SAY_GOODBYE:String = "say_goodbye";//定义两个事件类型 private var _books:Array;//新增的事件属性 public function SayEvent(eventType:String="say_hello"){ super(eventType); } //用setter和getter方法设置_books属性 public function set books(bookArr:Array):void{ _books = bookArr; } public function get books():Array{ return _books; } override public function toString():String{ return formatToString("SayEvent","type","bubbles","cancelable","eventPhase","books"); } //重写clone方法,注意这里的由于新增了事件类型,可能会有问题。 override public function clone():Event{ var tmpEvt:SayEvent = new SayEvent(); tmpEvt._books = _books; return tmpEvt; } } }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
推荐文章
站长推荐
热点阅读