熱門文章

Ⓒegret.IEventDispatcher 用法

限制觸發器

let myCaller = new LimitCaller(3); // 只能觸發3次事件
myCaller.addEventListener(LimitCaller.CALL,()=>console.log(myCaller.callTimes),this);
myCaller.dispatchEvent(new egret.Event(LimitCaller.CALL)); // 1
myCaller.dispatchEvent(new egret.Event(LimitCaller.CALL)); // 2
myCaller.dispatchEvent(new egret.Event(LimitCaller.CALL)); // 3
myCaller.dispatchEvent(new egret.Event(LimitCaller.CALL)); // 不會再觸發
myCaller.reset(); // 觸發次數歸0
myCaller.dispatchEvent(new egret.Event(LimitCaller.CALL)); // 1

實作觸發器類別, 依照egret.IEventDispatcher介面規範

class LimitCaller extends egret.HashObject implements egret.IEventDispatcher {

    public static CALL:string = 'call';
    private dispatcher: egret.EventDispatcher;
    private _callTimes: number = 0;
    private limit: number;

    public get callTimes(): number {
        return this._callTimes;
    }

    public reset():void {
        this._callTimes = 0;
    }

    public constructor(limit: number) {
        super();
        this.dispatcher = new egret.EventDispatcher(this);
        this.limit = limit;
    }

    public once(type: string, listener: Function, thisObject: any, useCapture?: boolean, priority?: number): void {
        this.dispatcher.once(type, listener, thisObject, useCapture, priority);
    }

    public addEventListener(type: string, listener: Function, thisObject: any,
        useCapture: boolean = false, priority: number = 0): void {
        this.dispatcher.addEventListener(type, listener, thisObject, useCapture, priority);
    }

    public dispatchEvent(evt: egret.Event): boolean {
        if(++this._callTimes > this.limit) return false;
        return this.dispatcher.dispatchEvent(evt);
    }

    public hasEventListener(type: string): boolean {
        return this.dispatcher.hasEventListener(type);
    }

    public removeEventListener(type: string, listener: Function, useCapture: boolean = false): void {
        this.dispatcher.removeEventListener(type, listener, useCapture);
    }

    public willTrigger(type: string): boolean {
        return this.dispatcher.willTrigger(type);
    }
}

沒有留言:

張貼留言