參考:
Laya2.0 內嵌模式、加載模式、分離模式、文件模式的場景加載創建和場景打開關閉
版本2.1.1.1
白鷺中的場景是exml制作,發布后exml代碼都會打包到default.thm.json中,在項目運行時,在Main文件中加載。
Laya中的場景則提供了多種方式。
Laya編輯模式下F9。查看場景設置。
發布模式有文件模式,內嵌模式,加載模式,分離模式。 默認是文件模式。
這些模式的區別就是我的場景UI數據究竟放哪里。
我們現在分別用4種模式創景場景,每個場景只放一個button按鈕組件,則每個場景的ui數據就是一個按鈕。
文件模式 (默認)
文件模式不會創建場景類,只會生成場景數據。
創建TestSceneWJ場景,不會生成場景類,指的是LayaMaxUI.ts中不會自動生成如下圖中的類。
ui數據會生成一個單獨的TestSceneWJ.json文件,里面包含了Button的場景數據
打開場景
Laya.Scene.open("test/TestSceneWJ.scene");
在類里使用loadScene會去加載test/TestSceneWJ.json,加載完成后顯示界面
export default class TestSceneWJ extends Laya.View { constructor() { super(); }
createChildren():void{
super.createChildren();
this.loadScene("test/TestSceneWJ");
} }
內嵌模式
內嵌模式會生成場景類,並且場景數據內嵌到類里。
創建內嵌場景TestSceneNQ,自動生成了場景類TestSceneNQ。並且Button的ui數據在這個類里。
游戲發布后,ui數據打包在bundle.js里。在微信小游戲下,這種方法占用了寶貴的初始包4m資源,所以不推薦。
打開場景時,在類里使用createView使用ui數據
this.createView(TestSceneNQUI.uiView);
內嵌模式不能用Laya.Scene.open打開。需要自己new然后addChild。
加載模式
加載模式會生成場景類,ui數據會打包到一個ui.json文件里,使用時加載。
創建加載模式場景TestSceneZJ,自動生成了場景類
編輯模式F9,設置場景的發布模式為加載模式,然后ctrl+F12導出
加載模式不會生成TestSceneZJ.json的單獨文件,而是所有加載模式的場景數據都在ui.json里。
加載模式無法使用Laya.Scene.open打開,只能自己new,然后addChild
先加載ui.json,然后再使用
Laya.loader.load("ui.json", Laya.Handler.create(this, this.onLoadUI)); private onLoadUI{ Laya.View.uiMap = Laya.loader.getRes("ui.json"); Laya.stage.addChild(new TestSceneJZ()); }
用createView創建
export default class TestSceneZJ extends Laya.View { constructor() { super(); } createChildren(){ super.createChildren(); this.createView(Laya.View.uiMap["test/TestSceneJZ"]); } }
分離模式
分離模式會創建場景類,然后生成一個單獨的場景數據json。和文件模式的區別就是:文件模式不會創建場景類。
創建分離模式場景TestSceneFL,自動生成場景類。
單獨的場景文件json
打開場景
Laya.Scene.open("test/TestSceneFL.scene")
時,在類里使用loadScene加載
this.loadScene("test/TestSceneFL");
現在我們知道了4種模式的區別。那么實際項目如何使用
內嵌模式:場景數據放在bundle.js里,占用了寶貴的初始包資源。
加載模式:和白鷺的default.thm.json一樣,將所有場景數據都放在里面一次性加載。場景數據不多時,可以考慮使用,畢竟只加載一次,減少了多場景多json的請求。
文件模式:不自動生成場景類,不太方便使用。
分離模式:將場景數據分成多個json,在使用時才去加載,減少了用戶初次進入游戲的等待時間。