# 場(chǎng)景的加載與切換
在cocos中敷矫,默認(rèn)只會(huì)運(yùn)行一個(gè)場(chǎng)景,其他的場(chǎng)景當(dāng)不再運(yùn)行時(shí),所有的節(jié)點(diǎn)與資源都將會(huì)被自動(dòng)銷(xiāo)毀
1.? 進(jìn)入場(chǎng)景與切換場(chǎng)景用loadScene()方法執(zhí)行,例如:??
//?home為我們創(chuàng)建場(chǎng)景的文件名(不帶后綴), 函數(shù)會(huì)自動(dòng)索引相應(yīng)的場(chǎng)景文件并加載所需的資源文件
cc.director.loadScene('home');
2. 有時(shí),我們會(huì)用到預(yù)加載場(chǎng)景心包,讓我們的游戲進(jìn)入下一個(gè)場(chǎng)景更為流暢,更為迅速缨恒。 可以使用proloadScene()方法, 例如
cc.director.proloadScene('game', function(){
console.log('gameScene is proloaded');
});
然后我們只需再運(yùn)行 cc.director.loadScene('game')方法, 即可快速打開(kāi)下一個(gè)場(chǎng)景谴咸。
3. 當(dāng)我們切換場(chǎng)景時(shí), 所有的節(jié)點(diǎn)和資源都會(huì)銷(xiāo)毀,那么我們?nèi)绾芜M(jìn)行場(chǎng)景之間的數(shù)據(jù)交互呢骗露,我們可以利用常駐節(jié)點(diǎn)來(lái)完成岭佳。
常駐節(jié)點(diǎn):表示此節(jié)點(diǎn)不會(huì)在隨著場(chǎng)景的銷(xiāo)毀而銷(xiāo)毀,會(huì)一直保留下去萧锉,直到手動(dòng)回收或銷(xiāo)毀
創(chuàng)建一個(gè)常駐節(jié)點(diǎn):
cc.director.addPersistRootNode(cc.Node);
這樣, cc.Node就變成了一個(gè)常駐節(jié)點(diǎn), 掛載在此節(jié)點(diǎn)下的數(shù)據(jù)就不會(huì)隨著場(chǎng)景的銷(xiāo)毀而銷(xiāo)毀, 我們可以用來(lái)存儲(chǔ)一些常用到的信息如RoleInfor等珊随。
我們還可以注銷(xiāo)一個(gè)常駐節(jié)點(diǎn):
cc.director.removePersistRootNode(cc.Node);
**注意** 此API不會(huì)直接銷(xiāo)毀此節(jié)點(diǎn),而是將節(jié)點(diǎn)從常駐節(jié)點(diǎn)變?yōu)槠胀ü?jié)點(diǎn)柿隙,會(huì)隨著場(chǎng)景的銷(xiāo)毀而銷(xiāo)毀叶洞。
4. 我們還可以在loadScene方法中添加回調(diào)函數(shù),用于加載完場(chǎng)景后處理數(shù)據(jù)禀崖,如:
cc.director.loadScene('home', this.getUserInfor);
// this.getUserInfor方法用來(lái)獲取玩家信息
由于回調(diào)方法只能寫(xiě)在本腳本之中衩辟,會(huì)隨著場(chǎng)景銷(xiāo)毀而注銷(xiāo),所以我們一般將回調(diào)方法寫(xiě)在常駐節(jié)點(diǎn)的腳本中波附,用來(lái)進(jìn)一步的初始化場(chǎng)景或者傳遞數(shù)據(jù)艺晴。