资讯

展开

cocos入门5:场景切换和资源管理

作者:快盘下载 人气:

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属性与图片绑定
cocos入门5:场景切换和资源管理
最终效果

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)

加载全部内容

相关教程
猜你喜欢
用户评论
快盘暂不提供评论功能!