game-egret.Ticker

egret.Ticker 使用範例


class Main extends eui.UILayer {

    protected createChildren(): void {
        super.createChildren();
        egret.lifecycle.onPause = () => egret.ticker.pause();
        egret.lifecycle.onResume = () => egret.ticker.resume();
        egret.registerImplementation('eui.IAssetAdapter', new AssetAdapter());
        egret.registerImplementation('eui.IThemeAdapter', new ThemeAdapter());
        this.runGame();
    }

    private async loadResource() {
        let loadingView = this.stage.addChild(new LoadingUI()) as LoadingUI;
        await RES.loadConfig('resource/default.res.json', 'resource/');
        await new Promise(resolve => new eui.Theme('resource/default.thm.json', this.stage).once(eui.UIEvent.COMPLETE, resolve, this));
        await RES.loadGroup('preload', 0, loadingView);
        this.stage.removeChild(loadingView);
    }

    private async runGame() {
        await this.loadResource();
        // --- Edwin 給你最乾淨的程式碼, 從這行以下開始寫喔 ---

        // egret.Ticker 跟 egret.ticker(egret.sys.SystemTicker) 不同
        // egret.Ticker 會受到 egret.ticker.pause() 跟 egret.ticker.resume() 影響
        // 註冊 onTick 事件 (基本上跟 ENTER_FRAME 相同, 但是這個事件會回傳每個影格時間間隔)
        egret.Ticker.getInstance().register(onTick, null);
        egret.log('register');

        // 累計時間變數
        let passTime: number = 0;
        
        return; // onTick 會因為 Hoisting 關係事先宣告 , https://developer.mozilla.org/zh-TW/docs/Glossary/Hoisting

        function onTick(dt: number) {
            // 累加時間, dt是影格時間間隔, 以毫秒為單位
            passTime += dt;
            egret.log('onTick');
            // 經過 5秒 後删除影格函数
            if (passTime > 5000) {
                egret.Ticker.getInstance().unregister(onTick, null);
                egret.log('unregister');
            }
        }

    }

}

spacer

沒有留言:

張貼留言