本文使用白鷺引擎版本是5.2.7 當(dāng)前時(shí)間最新版 (截圖時(shí)又出現(xiàn)了一版们拙,迭代速度還是很快的)
1. 選擇游戲開發(fā)模版
一定要選擇ui模版锡移,而不要選擇game面板
game模版刪去了theme和eui部分組件,如果你想自定義ui崔赌,還需要手動(dòng)創(chuàng)建一個(gè)default.thm.json文件意蛀,挺麻煩的,因?yàn)樗凶约簩S懈袷椒灞桑哉?qǐng)盡量選擇ui開發(fā),一樣可以開發(fā)游戲
game模版不包括紅線范圍內(nèi)的文件
2. Main.ts 代碼刪除要小心
ui項(xiàng)目 Main基于 eui.UILayer
game項(xiàng)目 Main基于 egret.DisplayObjectContainer
兩個(gè)的區(qū)別在于game項(xiàng)目使用事件偵聽來監(jiān)控場(chǎng)景加載到舞臺(tái)上
this.once(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this);
而ui項(xiàng)目使用createChildren函數(shù)
3. 心跳
不可刪太雨,非內(nèi)存回收吟榴,是用于在后臺(tái)時(shí)對(duì)內(nèi)核更新暫停。
egret.lifecycle.addLifecycleListener((context) => {
// custom lifecycle plugin
})
egret.lifecycle.onPause = () => {
egret.ticker.pause();
}
egret.lifecycle.onResume = () => {
egret.ticker.resume();
}
4. 資源映射
不可刪除囊扳,用于default.res.json中字符串與文件路徑間的映射關(guān)系
let assetAdapter = new AssetAdapter();
egret.registerImplementation("eui.IAssetAdapter", assetAdapter);
egret.registerImplementation("eui.IThemeAdapter", new ThemeAdapter());
刪除這三句將無法使用eui和exml功能吩翻,打亂exml加載時(shí)序等諸多問題。筆者誤刪導(dǎo)致麻煩還真不少锥咸。
5. async和 await
成對(duì)出現(xiàn)狭瞎,用于異步加載并入同步隊(duì)列中,讓需要事件判斷的api變?yōu)轫樞蚣虞d的api搏予,也就是加載成功/失敗后才會(huì)繼續(xù)執(zhí)行之后的語句熊锭。
6. 創(chuàng)建eui 和創(chuàng)建 exml
首先egret wing開發(fā)程序是有界面編輯器的,一臉懵逼的我找了半天,發(fā)現(xiàn)新建exml就是界面編輯器碗殷,而直接創(chuàng)建eui時(shí)可以包含exml精绎,而且這樣做可以不設(shè)置eui的skinName,因?yàn)閯?chuàng)建的時(shí)候锌妻,他們之間已經(jīng)在default.thm.json中相互關(guān)聯(lián)了代乃, 之后創(chuàng)建這個(gè)類,就會(huì)自動(dòng)加載其對(duì)應(yīng)的exml皮膚仿粹。
7. exml 使用圖片和json打包圖問題
exml界面編輯是可以使用json打包圖片和散圖的搁吓,方法是從左下角的資源目錄查找,此資源目錄列表來源于default.res.json內(nèi)的preload內(nèi)容(默認(rèn)main是加載preload的)吭历,有需要用到的資源需要在這里配置堕仔。另外,圖片等的資源可以手動(dòng)寫(source = “preload下的圖片名稱/圖片全地址”)毒涧,但直接從左下角拖拽進(jìn)去使用資源更為省心贮预。
我在這里遇到了兩個(gè)問題:
- 我的資源沒有任何顯示,后來發(fā)現(xiàn)是因?yàn)橘Y源列表窗口太小契讲,并且當(dāng)時(shí)不知道窗口可以拖動(dòng)
- 左下角拖拽無論是圖片還是紋理集都無法在測(cè)試時(shí)成功加載仿吞,總是提示是 “ip地址+紋理名稱” 找不到鏈接的問題,其實(shí)是上面第四大點(diǎn)提到的資源映射代碼讓我刪掉了導(dǎo)致的捡偏。唤冈。。银伟。你虹。
我最初的解決方案很蠢,紋理無法正常加載彤避,就直接把圖片的實(shí)際資源地址手寫到source里面傅物,雖然能正常顯示,但是治標(biāo)不治本琉预。
8. 資源id的調(diào)用
在之前代碼誤刪導(dǎo)致的問題中董饰,這里也體現(xiàn)出來,partAdded在childrenCreated之后加載圆米,導(dǎo)致無法正常處理內(nèi)部對(duì)象卒暂。(內(nèi)部對(duì)象直接在eui界面類創(chuàng)建對(duì)象id名對(duì)應(yīng)的變量,在之后可以直接調(diào)用)
這里我在錯(cuò)亂的邏輯中繼續(xù)錯(cuò)亂娄帖,在eui界面類中加入了個(gè)timer用于延遲偵聽partAdded完全加載完畢的完成事件也祠,表面上看起來和正常邏輯代碼跑到childrenCreated是一樣的。但是這種方法治標(biāo)不治本近速,還是需要將第四大點(diǎn)修復(fù)诈嘿,才能有效解決這個(gè)時(shí)序問題堪旧。
9. 顯示位置出錯(cuò)
創(chuàng)建很多displaycontainer+bitmap對(duì)象后會(huì)導(dǎo)致無法正常顯示,或者影響其他代碼對(duì)象顯示錯(cuò)亂問題
這時(shí)候我將大量創(chuàng)建顯示對(duì)象的函數(shù)放到場(chǎng)景創(chuàng)建的最后一環(huán)進(jìn)行永淌,暫時(shí)避免了這個(gè)問題崎场。
10. eui類庫(kù)和egret類庫(kù)關(guān)系
egret類庫(kù)是白鷺最基本的類庫(kù),eui是銜接了exml組件皮膚封裝的顯示類egret擴(kuò)展遂蛀。eui所有對(duì)象都可以被addChild谭跨。
11. Tween的問題
在測(cè)試過程中,egret雖然可以通過心跳暫停刷新李滴,但是貌似某些情況下Tween內(nèi)部還是在跑動(dòng)螃宙,導(dǎo)致恢復(fù)時(shí)tween動(dòng)畫會(huì)跳到一個(gè)奇怪的地方。
也許和測(cè)試環(huán)境有關(guān)系所坯,在電腦端呈現(xiàn)的錯(cuò)誤在手機(jī)端未復(fù)現(xiàn)
12. 事件和Tween疊加使用谆扎。
當(dāng)在事件內(nèi)部使用Tween并調(diào)用call來響應(yīng)完成事件時(shí),事件evt傳遞參數(shù)并不能一直駐留在內(nèi)存里芹助,當(dāng)call執(zhí)行時(shí)堂湖,evt已經(jīng)被回收了。如果想有效的使用evt的內(nèi)容状土,將evt的內(nèi)容通過call的第三個(gè)參數(shù)方式傳遞給call无蜂,evt本身不可以傳遞進(jìn)去,因?yàn)槭录瓿奢喸兒髸?huì)強(qiáng)制回收evt蒙谓。
先寫這么多斥季,之后如果再遇到其他麻煩陸續(xù)添加