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属性与图片绑定
在这里插入图片描述
最终效果
在这里插入图片描述

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.releaseResreleaseRes可以传入和loadRes相同的路径和类型参数。

cc.loader.releaseRes('imageName', cc,SoruteFrane)
cc.loader.releaseRes('imageName')

此外,也可以使用cc.loader.releaseAsset来释放tidings的Asset实例

cc.loader.releaseAsset( spriteFrame)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值