• Cocos Creator中使用事件中心


    export class EventCenter {
        /** 监听数组 */
        private listeners = {};
    
        /** 
        * 注册事件
        * @param name 事件名称
        * @param callback 回调函数
        * @param context 上下文
        */
        public register(name: string, callback: Function, context: any) {
            let observers: Observer[] = this.listeners[name];
            if (!observers) {
                this.listeners[name] = [];
            }
            this.listeners[name].push(new Observer(callback, context));
        }
    
        /**
        * 移除事件
        * @param name 事件名称
        * @param callback 回调函数
        * @param context 上下文
        */
        public remove(name: string, context: any) {
            let observers: Observer[] = this.listeners[name];
            if (!observers) return;
            let length = observers.length;
            for (let i = 0; i < length; i++) {
                let observer = observers[i];
                if (observer.compar(context)) {
                    observers.splice(i, 1);
                    break;
                }
            }
            if (observers.length == 0) {
                delete this.listeners[name];
            }
        }
    
        /**
        * 发送事件
        * @param name 事件名称
        */
        public fire(name: string, ...args: any[]) {
            let observers: Observer[] = this.listeners[name];
            if (!observers) return;
            let length = observers.length;
            for (let i = 0; i < length; i++) {
                let observer = observers[i];
                observer.notify(name, ...args);
            }
        }
    }
    
    /*************************************************************/
    
    /**
    * 观察者
    */
    export class Observer {
        /** 回调函数 */
        private callback: Function = null;
        /** 上下文 */
        private context: any = null;
    
        constructor(callback: Function, context: any) {
            let self = this;
            self.callback = callback;
            self.context = context;
        }
    
        /**
        * 发送通知
        * @param args 不定参数
        */
        notify(...args: any[]): void {
            let self = this;
            self.callback.call(self.context, ...args);
        }
    
        /**
        * 上下文比较
        * @param context 上下文
        */
        compar(context: any): boolean {
            return context == this.context;
        }
    }
  • 相关阅读:
    登录验证
    登录和退出
    无限极分类信息
    JavaScript 常用函数总结
    Java初学几个程序背诵
    织梦if标签
    PHP常用函数总结(二):
    PHP常用函数总结(一):
    Java开发中的23种设计模式详解(转)
    2015推荐的Android框架
  • 原文地址:https://www.cnblogs.com/steamedbun/p/10622928.html
Copyright © 2020-2023  润新知