在Cocos Creator的脚本中;可以使用导演类的loadScene方法加载场景;loadScene可以传递一个或两个参数;第一个参数是场景名称;第二个参数是场景加载完毕后的回调函数;场景加载完毕后的回调函数可以进行必要的初始化或数据传递操作;代码如下所示。
cc.Class({
extends: cc.Component,
properties: {},
start () {
setTimeout( function(){
cc.director.loadScene(;MySecret;)
}.bind( this), 5000)
},
})
有些场景的加载时间过长;会造成游戏的卡顿;这时我们可以使用预加载的方式;在时间充裕的时候加载场景数据;将这些数据缓存在内存中;这种方式本质上是一种;空间换时间;的方式。预加载的操作代码如下所示。
cc.director.preloadScene(;MySecret;, function(){
cc.log(;next scene preloaded;)
})
通过常驻节点进行场景资源管理和参数传递
引擎同时只会运行一个场景;当切换场景时;默认会将场景内所有节点和其他实例销毁。如果我们需要用一个组件控制所有场景的加载;或在场景之间传递参数数据;就需要将该组件所在节点标记为「常驻节点」;使它在场景切换时不被自动销毁;常驻内存。我们使用以下接口:
cc.game.addPersistRootnode( myNode)
上面的接口会将myNode变为常驻节点;这样挂在上面的组件都可以在场景之间持续作用;我们可以用这样的方法来储存玩家信息;或下一个场景初始化时需要的各种数据。
如果要取消一个节点的常驻节点:
cc.game.removePersistRootNode( myNode)
在Creator中;所有继承自cc.Asset 的类型都统称资源;如;cc.Texture2D , cc.SpriteFrame,
cc.Animationc1ip, cc.Prefab 等。它们的加载是统一并且自动化的;相互依赖的资源能够被自动预加载。
例如;当引擎在加载场景时;会先自动加载场景关联到的资源;这些资源如果再关联其它资源;其它也会被先被加载;等加载全部完成后;场景加载才会结束。
脚本中可以这样定义一个Asset属性:
cc.Class({
extends: cc.Component,
properties: {
sprite_fram: {
default: null,
type: cc.SpriteFrame
}
},
onLoad () {
let sprite = this.node.getComponent( cc.Sprite)
sprite.spriteFrame = this.sprite_fram
},
});
将Asset属性与图片绑定
最终效果
Creator提供了cc.loader . loadRes这个API来专门加载那些位于resources目录下的Asset。调用时;你只要传入相对resources的路径即可;并且路径的结尾处不能包含文件扩展名。
下方例子加载了1个预制体
cc.Class({
extends: cc.Component,
properties: {},
onLoad () {
let self = this
cc.loader.loadRes( ;Anima;, cc.Prefab, function( err, prefab){
let newNode = cc.instantiate( prefab)
newNode.setPosition( 100, 100)
self.node.addChild( newNode)
})
},
});
loadRes加载进来的单个资源如果要释放;可以调用cc.loader.releaseRes;releaseRes可以传入和loadRes相同的路径和类型参数。
cc.loader.releaseRes(;imageName;, cc,SoruteFrane)
cc.loader.releaseRes(;imageName;)
此外;也可以使用cc.loader.releaseAsset来释放tidings的Asset实例
cc.loader.releaseAsset( spriteFrame)