1. 首先,再次被網上一大堆屎同樣的資料搞得浪費了我一天時間。各類坑。javascript
2. 本文先講一種正確的方式,而後再列舉坑。html
去www.egret.com下載最新的引擎,個人最新版本是5.2.2. 而後就會被安裝了一個全家桶。在裏面,你還要在去點擊Egret Wing,安裝個開發環境。java
而後,在項目的地方,新建一個遊戲項目,帶EUI框架:git
必須注意紅框的地方,避免踩坑。類型是Egret遊戲項目。以後,全家桶就會默認打開Egret Wing進入開發環境。github
在src目錄下面,新建模板文件——新建EUI組件。json
這個時候,第一個坑出現,沒有default.thm.json文件。微信
本身new一個,裏面填寫{}, 放在resource目錄下:框架
以後再新建EUI組件就沒有報錯了。dom
我新建一個叫作Helloworld的組件。函數
時候就會在resource/eui_skins目錄下,出現了exml窗體界面文件,點擊,添加一個label,名字是nameL
以後,在src目錄下,修改Hellworld.js文件:
class Helloworld extends eui.Component implements eui.UIComponent { public nameL : eui.Label; public constructor() { super(); this.addEventListener(eui.UIEvent.COMPLETE, this.onComplete, this); } protected partAdded(partName:string,instance:any):void { super.partAdded(partName,instance); } protected childrenCreated():void { super.childrenCreated(); } protected onComplete(e):void{ this.nameL.addEventListener(egret.TouchEvent.TOUCH_TAP, this.tap, this); } protected tap(e):void{ this.nameL.text = "HELLO WORLD"; } }
注意這裏面的坑一大堆。
1. 首先,不須要指定this.SkinName,不然微信小遊戲會一大堆搓。
2. 要在構造函數監聽onComplete時間,而後裏面去綁定nameL的監聽器。忘記什麼childCreated之類的,都是坑。
最後,在Main.js的入口函數裏面,:createGameScene方法,把EUI添加到舞臺:
接下來跑一下,看看效果:
恩。很好,徹底沒有效果。由於沒有加EUI的主題自動映射起,接下來,我又建立了一個EUI項目,和這個遊戲項目對比來開發,差異點包括:
1. manifest.json文件,game下面添加
"bin-debug/AssetAdapter.js",
"bin-debug/ThemeAdapter.js"
2. egretProperties.json,添加eui節點:
"eui": {
"exmlRoot": [
"resource/eui_skins"
],
"themes": [
"resource/default.thm.json"
],
"exmlPublishPolicy": "commonjs"
},
3. src目錄,添加AssetAdapter,ThemeAdapter
4. Main.ts,在onAddToStage方法,添加
//inject the custom material parser
//注入自定義的素材解析器
let assetAdapter = new AssetAdapter();
egret.registerImplementation("eui.IAssetAdapter", assetAdapter);
egret.registerImplementation("eui.IThemeAdapter", new ThemeAdapter());
5. Main.ts, 在loadResource添加:
await this.loadTheme();
private loadTheme() {
return new Promise((resolve, reject) => {
// load skin theme configuration file, you can manually modify the file. And replace the default skin.
//加載皮膚主題配置文件,能夠手動修改這個文件。替換默認皮膚。
let theme = new eui.Theme("resource/default.thm.json", this.stage);
theme.addEventListener(eui.UIEvent.COMPLETE, () => {
resolve();
}, this);
})
}
而後在跑一下,就出現了。
最後點擊發布,微信小遊戲。而後打開微信的開發工具,加載導出的項目目錄。所有完成!!!!
這裏就在遊戲項目裏面成功的引入了EUI皮膚管理!
其餘的一些坑再度強調:
1. EUI的類,不須要聲明skinName!!! 不然比錯
2. 沒有XML的讀取,由於使用了commonjs方式把皮膚編譯成js了。若是你要xml去夾在,必錯!
3. 沒有什麼window.DOMParser = require("./xmldom/xmldom.js").DOMParser;
那個智障的egret官方微信小遊戲FAQ,直接忽略到,簡直就是把你往坑再踩一腳。
http://developer.egret.com/cn/github/egret-docs/Engine2D/minigame/minigameFAQ/index.html