Cocos资源动态加载

本文详细介绍了Cocos资源的动态加载方法,包括使用cc.resources.load()函数进行运行时加载,如何处理加载成功与失败的情况,以及利用闭包解决回调函数中的this问题。此外,还讲解了一次性加载多个资源的两种方式,即指定多个资源路径和加载资源目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cocos资源动态加载

资源加载

Cocos资源的加载,有两种方式:

  1. 静态加载
    直接在属性管理器指定,在节点被加载时一并加载
  2. 动态加载
    在脚本中,使用代码 cc.resources.load () 运行时加载,实现方法:
 onClicked(){
        let self = this;    // 这是JS中的闭包语法
        cc.resources.load("icon/汽车", cc.SpriteFrame, function (err, assets) {
            self.node.getComponent(cc.Sprite).spriteFrame = <cc.SpriteFrame> assets;//类型转换
        });
}

实现如下效果,点击切换图片
在这里插入图片描述

方法原型:cc.resources.load( path, type, onComplete)
参数:

  1. 第1个参数: path
    表示要加载的资源的路径
    例如,icon/汽车 指的是 assets/resources/icon/汽车
    待加载的资源必须放在resources目录下,会在该文件夹内自动导出
    路径不能加后缀名
  2. 第2个参数:type
    指定资源对象类型,可以省略 cc.SpriteFrame , cc.AudioClip
  3. 第3个参数:onComplete
    指定回调方法,当资源加载完毕时调用
    function( err, assets ) {
    }
    若err == null ,表示资源加载成功,assets即为加载得到的资源对象
    若err!=null ,表示资源加载出错,err即为出错的原因。
  4. assets是cc.Asset类型,需要使用类型转换:
  5. 注意回调函数无法访问this
闭包

在上述函数的onComplete参数的函数中,使用的为回调方法(在A函数中将B函数的指针作为参数或者匿名函数作为函数参数,此时B函数叫做回调方法)
无法访问this指针,需要用函数内的临时变量导入

加载多个资源

可以一次性的加载多个资源,有两个办法:

  1. 指定多个资源路径
    cc.resources.load ( paths, callback(err, assets){ … })
    其中,paths类型 [cc.String], assets类型 [cc.Asset]
  2. 指定一个资源目录
    cc.resources.loadDir(path , callback(err,assets){ … })
    其中,path是一个文件夹路径,assets是[cc.Asset]
 frames : cc.SpriteFrame[]  = new Array();

    sprite : cc.Sprite = null; // Sprite组件
    index : number = 0;   // 当前显示第N张图片
    interval : number = 0.1; // 定时器的间隔

    onLoad () {
        this.sprite = this.getComponent(cc.Sprite);

        // 动态加载一个目录下的所有资源
        let self = this;        
        cc.resources.loadDir("飞羽gif/",  cc.SpriteFrame, function (err, assets :[cc.SpriteFrame]) {
             self.frames = assets;
        });

    }

    start () {
        this.schedule(this.onTimer, this.interval);
    }

    onTimer(){
        if(this.frames.length ==0) return;

        this.sprite.spriteFrame = this.frames[this.index];

        // 下一帧
        this.index ++;
        if(this.index >= this.frames.length)
            this.index = 0;
    }
    // update (dt) {}

    onDestroy(){
        this.unschedule(this.onTimer);
    }

逻辑基本同Gif图片、动画加载的流程,只是资源获取的方式不同。
链接: 官方手册介绍.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值