1、加载和切换场景
在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)
2、资源管理
2.1、通过资源属性设置和加载资源
在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属性与图片绑定
最终效果
2.2、动态加载资源
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)
})
},
});
2.3、资源释放
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)