game-egret.MovieClipDataFactory

egret.MovieClipDataFactory 使用範例, 請參考 egret.MovieClip


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 給你最乾淨的程式碼, 從這行以下開始寫喔 ---

        // 先建立資料工廠
        const playerFactory = new egret.MovieClipDataFactory(RES.getRes('myPlayer_json'), RES.getRes('myPlayer_png'));
        // 從資料工廠產生資料
        const mc_data: egret.MovieClipData = playerFactory.generateMovieClipData('player'); // player 同檔名
        // 建立資料顯示容器 
        const player = new egret.MovieClip(mc_data);
        // 設定每秒播放12格
        player.frameRate = 12;
        // 0 表示從第 0 格開始播放,播放次數 -1 表示 loop
        player.gotoAndPlay(0, -1);
        // 顯示於場景
        this.addChild(player);


        // 預設是開啟緩存, 開啟狀態下可以加速資料讀取速度
        console.log(playerFactory.enableCache); // true

        // 清除 cache 後, 再去 generateMovieClipData 同一個會比較耗效能在產資料上, 但是效果一樣
        playerFactory.clearCache();
        playerFactory.generateMovieClipData('player'); // 此時重產資料會耗效能

        // 一個 MovieClip 可能有多個影片片段, 譬如有 enemy, baby, 需要在 Texture Merger 設置多個影片片段
        // 以下取用不同片段資料 
        const mc_data_enemy = playerFactory.generateMovieClipData('enemy');
        const mc_data_baby = playerFactory.generateMovieClipData('baby');

    }

}

通常資料工廠可以有很多組動畫, 但考慮合併圖尺寸過大不會全部都放到同一個工廠內, 一個遊戲視需求做資料工廠分類, 譬如以關卡區分, 關卡1敵人工廠, 關卡2敵人工廠. 以種類區分車子工廠, 船工廠, 火箭工廠. 視需求可自己規劃. 關於動畫編輯有更進階的編輯軟體為 Dragonbone, 可以多方嘗試.

spacer

沒有留言:

張貼留言