Laya 自制框架之事件管理器
1 package framework.manager
2 {
3 import framework.event.FrameworkEvent;
4
5 import laya.events.EventDispatcher;
6
7 /**
8 * 编写事件管理器的目的是:
9 * 1.统筹全局事件的编写方案
10 * 2.统一管理事件派发
11 * 3.使用callater解决事件重复调用,事件阻塞
12 *
13 * --ixenos 2021年4月13日19点12分
14 */
15 public class EventManager extends EventDispatcher
16 {
17 private static var _ins:EventManager;
18
19 private var _laterBuffer:Array;
20
21 public function EventManager()
22 {
23 _laterBuffer = [];
24 }
25
26 public static function get ins():EventManager{
27 if(!_ins){
28 _ins = new EventManager();
29 }
30 return _ins;
31 }
32
33 public static function clean():void{
34 if(_ins){
35 _ins = null;
36 }
37 }
38
39 /**
40 * 派发事件
41 * @param type
42 * @param data
43 *
44 */
45 public function dispatchLaterEvent(type:String):void{
46 var lBuf:Array = EventManager.ins.laterBuffer;
47 if(!lBuf){
48 lBuf = [];
49 EventManager.ins.laterBuffer = lBuf;
50 }
51 if(lBuf.indexOf(type)==-1){
52 lBuf.push(type);
53 }
54
55 Laya.timer.callLater(EventManager.ins, EventManager.ins.flushLaterBuffer);
56 }
57
58 public function flushLaterBuffer():void{
59 Laya.stage.event(FrameworkEvent.LATTER_EVENT, [EventManager.ins.laterBuffer]);
60 EventManager.ins.clearLaterBuffer();
61 }
62
63 public function set laterBuffer(arr:Array):void{
64 _laterBuffer = arr;
65 }
66
67 public function get laterBuffer():Array{
68 if(!_laterBuffer){
69 _laterBuffer = [];
70 }
71 return _laterBuffer;
72 }
73
74 public function clearLaterBuffer():void{
75 laterBuffer = [];
76 }
77
78 /**
79 * 注册延迟调用事件
80 * @param type
81 * @param caller
82 * @param listener
83 *
84 */
85 public function regLaterEvent(caller:*, listener:Function):void{
86 regEvent(FrameworkEvent.LATTER_EVENT, caller, listener);
87 }
88
89 /**
90 * 注册全局事件
91 * @param type
92 * @param caller
93 * @param listener
94 * @param args
95 *
96 */
97 public function regEvent(type:String, caller:*, listener:Function, args:Array=null):void{
98 Laya.stage.on(type, caller, listener, args);
99 }
100
101 /**
102 * 销毁延迟调用事件
103 * @param type
104 * @param caller
105 * @param listener
106 *
107 */
108 public function removeLaterEvent(caller:*, listener:Function):void{
109 removeEvent(FrameworkEvent.LATTER_EVENT, caller, listener);
110 }
111
112 /**
113 * 销毁全局事件
114 * @param type
115 * @param caller
116 * @param listenter
117 *
118 */
119 public function removeEvent(type:String, caller:*, listenter:Function):void{
120 Laya.stage.off(type, caller, listenter);
121 }
122
123 }
124 }