cocos creator基础-(十三)cc.Loader使用

本文围绕cc.loader展开,介绍其加载本地和远程资源的方法,如本地资源需在assets/resources/文件夹下,加载时路径无需加该前缀;远程可加载任意类型文件。还阐述了资源释放机制,包括场景自动释放和手动释放,以及代码加载资源的释放设置。

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

1: 掌握cc.loader加载本地资源;

2: 掌握cc.loader加载远程资源;

3: 掌握资源释放的机制与autorelease;

4: 掌握手动释放资源;

 

cc.Loader

 

1:有三个默认的Pipeline:

  (1) assetLoader: 主要用于加载资源, 加载asset类型资源,和释放这些资源;

  (2) downloader: 主要用于下载文件, 文本,图像,脚本,声音,字体, 自定义的download;

  (3) loader: 第三个默认的Pipeline,可以加载json, image, plist, fnt, uuid;

2: 资源分为本地(assets目录下)与远程资源;

3: 加载异步的;

 

 

本地资源加载

 

1: 在代码里面加载资源必须要求资源在assets/resources/文件夹下;

  (1)根据场景的依赖关系来打包我们的资源; 去掉不用的资源

  (2)无法判断在代码里面加载的资源,是哪些?-->所有的resources目录下的资源,都会被打包

  进去,你在代码里面就能加载到它了。

  如果资源不在代码里面加载,一般不要放到resources目录下 ,如果放到了,这个资源不管你有没有用,都会被打包进去;

2: 资源的url不需要加assets/resources这个部分,路径不需要加这个前缀;

3:cc.loader.loadRes(url, onComplete回掉函数);

4: loadResArray([], type类型, progressCallback, completeCallback);

5: loadResDir (url [type ] [progressCallback ] [completeCallback ]) 加载一个路径下的资源;

    cc.loader.loadResDir( // 加载resources目录下的所有资源

        "/", function(){});

6: getRes(url, [type]); 获取资源id;

 

远程资源加载

 

1: cc.loader.load(url, 结束回掉函数);

2: cc.loader.load({url: “”, type: “”}, 结束回掉函数);

3: 远程加载任意类型文件;

 

资源卸载

1:每个场景有个自动释放资源

  勾选上这个场景的资源会自动释放,不勾选上这个场景的资源不释放

2: 代码加载的资源,默认是不会受场景这个选项的影响的,除非设置

  cc.loader.setAutoRelease(url, brealse),在场景自动释放的时候,代码资源也会释放

3: 手动释放资源

  loadRes/ releaseRes

  load / release

  releaseAsset (资源对象的object);

cc.Class({
    extends: cc.Component,

    properties: {
        // foo: {
        //    default: null,      // The default value will be used only when the component attaching
        //                           to a node for the first time
        //    url: cc.Texture2D,  // optional, default is typeof default
        //    serializable: true, // optional, default is true
        //    visible: true,      // optional, default is true
        //    displayName: 'Foo', // optional
        //    readonly: false,    // optional, default is false
        // },
        // ...
        audio: {
            type: cc.AudioSource,
            default: null,
        },

        sprite: {
            type: cc.Sprite,
            default: null,
        },
    },

    // use this for initialization
    onLoad: function () {

    },

    start: function() {
        // this.local_load();
        this.remote_load();
    },

    remote_load: function() {
        // 加载远程的图片 release 卸载资源
        cc.loader.load("http://127.0.0.1:6080/splash.png", function(err, ret) {
            if(err) {
                console.log(err);
                return;
            }

            // ret is cc.Texture2D这样对象
            this.sprite.spriteFrame.setTexture(ret);
            this.sprite.node.setContentSize(ret.getContentSize()); // 使用这个图片的大小
            // end 
        }.bind(this));
        // end

        // 从服务器加载mp3来进行播放, type,就是url不带类型,我们就使用url + type的模式来制定类型
        cc.loader.load({url: "http://127.0.0.1:6080/bg.mp3", type: "mp3"}, function(err, ret) {
            if (err) {
                console.log(err);
                return;
            }
            this.audio.clip = ret;
            this.audio.play();
        }.bind(this));
        // end 

        // 从服务器加载json文件
        cc.loader.load({url: "http://127.0.0.1:6080/project.json", type: "json"}, function(err, ret) {
            if (err) {
                console.log(err);
                return;
            }
            
            console.log(ret);
        }.bind(this));
        // end 

        // 
        cc.loader.load({url: "http://127.0.0.1:6080/test.mydata", type: "mydata"}, function(err, ret) {
            if (err) {
                console.log(err);
                return;
            }
            
            console.log(ret);
        }.bind(this));
        // end 
    },

    local_load: function() {
        // 本地加载声音
        // 注意:这里不需要后缀名, assets/resources/这个也不需要  releaseRes卸载资源
        cc.loader.loadRes("bg", function(err, ret){
            if(err) {
                console.log(err);
                return;
            }
            console.log(ret); // audio clip
            this.audio.clip = ret;
            this.audio.play();
        }.bind(this));
        // end 

        // 本地加载图片
        cc.loader.loadRes("img/disk", cc.SpriteFrame, function(err, ret) {
            if (err) {
                console.log(err);
                return;
            }

            // spriteFrame对象
            // 例如我们的游戏,在进入下一个场景之前,有一个资源加载场景,那么到了新的场景后,我们就能够找到这个加载好的资源
            // cc.loader.getRes();
            this.sprite.spriteFrame = cc.loader.getRes("img/disk", cc.SpriteFrame);
            // end 
        }.bind(this));
        // end 
    },
    // called every frame, uncomment this function to activate update callback
    // update: function (dt) {

    // },
});

 

--------- beginning of system --------- beginning of main 2025-07-15 15:26:27.829 3124-3153 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x000082da 2025-07-15 15:26:27.829 3124-3153 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x000082e5 2025-07-15 15:26:27.835 3124-3153 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x00008c29 2025-07-15 15:26:27.835 3124-3153 eglCodecCommon org.cocos2d.demo E glUtilsParamSize: unknow param 0x000087fe 2025-07-15 15:26:27.858 3124-3153 EGL_emulation org.cocos2d.demo E tid 3153: eglSurfaceAttrib(1493): error 0x3009 (EGL_BAD_MATCH) 2025-07-15 15:26:29.679 3124-3151 jswrapper org.cocos2d.demo E ScriptEngine::onGetStringFromFile stream not found, possible missing file. 2025-07-15 15:26:29.679 3124-3151 jswrapper org.cocos2d.demo E ScriptEngine::runScript script stream, buffer is empty! 2025-07-15 15:26:29.679 3124-3151 jswrapper org.cocos2d.demo E [ERROR] Failed to invoke require, location: C:/ProgramData/cocos/editors/Creator/2.4.13/resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_global.cpp:299 2025-07-15 15:26:29.718 3124-3151 jswrapper org.cocos2d.demo E ScriptEngine::evalString catch exception: 2025-07-15 15:26:29.737 3124-3151 jswrapper org.cocos2d.demo E ERROR: Uncaught ReferenceError: self is not defined, location: src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:0:0 STACK: [0]anonymous@src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:2 [1]anonymous@src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js:3 [2]anonymous@jsb-adapter/jsb-engine.js:2975 [3]download@jsb-adapter/jsb-engine.js:2984 [4]downloadScript@jsb-adapter/jsb-engine.js:2971 [5]a@src/cocos2d-jsb.28d62.js:16668 [6]anonymous@src/cocos2d-jsb.28d62.js:16678 [7]retry@src/cocos2d-jsb.28d62.js:18111 [8]download@src/cocos2d-jsb.28d62.js:16663 [9]load@src/cocos2d-jsb.28d62.js:17318 [10]94.e.exports@src/cocos2d-jsb.28d62.js:17134 [11]_flow@src/cocos2d-jsb.28d62.js:17579 [12]async@src/cocos2d-jsb.28d62.js:17574 [13]anonymous@src/cocos2d-jsb.28d62.js:17261 [14]forEach@src/cocos2d-jsb.28d62.js:18189 [15]94.e.exports@src/cocos2d-jsb.28d62.js:17244 [16]_flow@src/cocos2d-jsb.28d62.js:17579 [17]anonymous@src/cocos2d-jsb.28d62.js:17586 [18]98.e.exports@src/cocos2d-jsb.2 2025-07-15 15:26:29.738 3124-3151 jswrapper org.cocos2d.demo E ScriptEngine::evalString script src/assets/_plugs/lib/gravityengine.mg.cocoscreator.min.dbb97.js, failed! 2025-07-15 15:26:29.738 3124-3151 jswrapper org.cocos2d.demo E [ERROR] Failed to invoke require, location: C:/ProgramData/cocos/editors/Creator/2.4.13/resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_global.cpp:299 2025-07-15 15:26:42.981 1715-2033 bt_btif com.android.bluetooth E register_notification_rsp: Avrcp device is not connected, handle: 0x0 2025-07-15 15:26:42.981 1715-2033 bt_btif com.android.bluetooth E register_notification_rsp: Avrcp device is not connected, handle: 0x0 2025-07-15 15:26:42.989 1452-1763 OMXNodeInstance media.codec E setConfig(0xf5210060:google.mp3.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001) 2025-07-15 15:26:42.990 1452-1763 OMXNodeInstance media.codec E getConfig(0xf5210060:google.mp3.decoder, ConfigAndroidVendorExtension(0x6f100004)) ERROR: Undefined(0x80001001) self问题解决了吗
最新发布
07-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值