zoukankan      html  css  js  c++  java
  • Laya 自制框架之事件管理器

    Laya 自制框架之事件管理器

    @author ixenos 2021年5月26日

      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 }
  • 相关阅读:
    VS开发工具 因插件问题导致 已停止工作 解决办法
    niceScroll 简单使用 及 插件API
    使用JQGrid 问题汇总 不定时更新
    H5特性 MutationObserver 监听元素 动态改变iframe高度
    UVALIVE 3972 March of the Penguins
    Codeforces #105 DIV2 ABCDE
    UVALIVE 3644 X-Plosives
    UVALIVE 3645 Objective: Berlin
    UVALIVE 3031 Cable TV Network
    UVALIVE 2927 "Shortest" pair of paths
  • 原文地址:https://www.cnblogs.com/ixenos/p/14813852.html
Copyright © 2011-2022 走看看