# 场景的加载与切换
在cocos中,默认只会运行一个场景,其他的场景当不再运行时,所有的节点与资源都将会被自动销毁
1. 进入场景与切换场景用loadScene()方法执行,例如:
// home为我们创建场景的文件名(不带后缀), 函数会自动索引相应的场景文件并加载所需的资源文件
cc.director.loadScene('home');
2. 有时,我们会用到预加载场景,让我们的游戏进入下一个场景更为流畅,更为迅速。 可以使用proloadScene()方法, 例如
cc.director.proloadScene('game', function(){
console.log('gameScene is proloaded');
});
然后我们只需再运行 cc.director.loadScene('game')方法, 即可快速打开下一个场景。
3. 当我们切换场景时, 所有的节点和资源都会销毁,那么我们如何进行场景之间的数据交互呢,我们可以利用常驻节点来完成。
常驻节点:表示此节点不会在随着场景的销毁而销毁,会一直保留下去,直到手动回收或销毁
创建一个常驻节点:
cc.director.addPersistRootNode(cc.Node);
这样, cc.Node就变成了一个常驻节点, 挂载在此节点下的数据就不会随着场景的销毁而销毁, 我们可以用来存储一些常用到的信息如RoleInfor等。
我们还可以注销一个常驻节点:
cc.director.removePersistRootNode(cc.Node);
**注意** 此API不会直接销毁此节点,而是将节点从常驻节点变为普通节点,会随着场景的销毁而销毁。
4. 我们还可以在loadScene方法中添加回调函数,用于加载完场景后处理数据,如:
cc.director.loadScene('home', this.getUserInfor);
// this.getUserInfor方法用来获取玩家信息
由于回调方法只能写在本脚本之中,会随着场景销毁而注销,所以我们一般将回调方法写在常驻节点的脚本中,用来进一步的初始化场景或者传递数据。