16.cc.Loader使用详解

本文介绍Cocos2d-x中资源加载的方法,包括本地和远程资源的加载方式及流程,同时提供代码示例说明如何加载不同类型的资源。

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

1. cc.loader

有三个默认的Pipeline:
     (1) assetLoader: 主要用于加载资源, 加载asset类型资源,和释放这些资源;
     (2) downloader: 主要用于下载文件, 文本,图像,脚本,声音,字体, 自定义的download;
     (3) loader:  第三个默认的Pipeline,可以加载json, image, plist, fnt, uuid;
资源分为本地(assets目录下)与远程资源;
加载异步的;

 

2. 本地资源加载

在代码里面加载资源必须要求资源在assets/resources/文件夹下;
  (1)根据场景的依赖关系来打包我们的资源;  去掉不用的资源
  (2)无法判断在代码里面加载的资源,是哪些?-->所有的resources目录下的资源,都会被打包进去,你在代码里面就能加载到它了;
      如果资源不在代码里面加载,一般不要放到resources目录下 ,如果放到了,这个资源不关你有没有用,都会被打包进去;
资源的url不需要加assets/resources这个部分,路劲不需要加这个前缀;
cc.loader.loadRes(url, onComplete回掉函数);
loadResArray([], type类型, progressCallback, completeCallback);
loadResDir (url [type ] [progressCallback ] [completeCallback ]) 加载一个路径下的资源;
getRes(url, [type]); 获取资源id;

 

3. 远程资源加载

cc.loader.load(url, 结束回掉函数);
cc.loader.load({url: “”, type: “”}, 结束回掉函数);
远程加载任意类型文件;

 

4. 资源卸载

每个场景有个自动释放资源
    勾选上这个场景的资源会自动释放,不勾选上这个场景的资源不释放
代码加载的资源,默认是不会受这个选项的影响的,除非设置
     cc.loader.setAutoRelease(url, brealse)
手动释放资源
    loadRes/ releaseRes  
    load / release
    releaseAsset (资源对象的object);

 

代码示例:  game_scene.js

// Learn cc.Class:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/class.html
//  - [English] http://docs.cocos2d-x.org/creator/manual/en/scripting/class.html
// Learn Attribute:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
//  - [English] http://docs.cocos2d-x.org/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
//  - [English] https://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html

cc.Class({
    extends: cc.Component,

    properties: {
        // foo: {
        //     // ATTRIBUTES:
        //     default: null,        // The default value will be used only when the component attaching
        //                           // to a node for the first time
        //     type: cc.SpriteFrame, // optional, default is typeof default
        //     serializable: true,   // optional, default is true
        // },
        // bar: {
        //     get () {
        //         return this._bar;
        //     },
        //     set (value) {
        //         this._bar = value;
        //     }
        // },

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

    },

    // LIFE-CYCLE CALLBACKS:

    // onLoad () {},

    /**
     * 加载本地资源
     */
    local_load() {

        //本地加载声音
        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对象
            console.log(ret);
            // this.sprite.spriteFrame = ret;

            //例如游戏中在进入下个场景之前,有一个资源想载入场景,到了新场景后就可以找到这个加载好的资源
            this.sprite.spriteFrame = cc.loader.getRes("img/disk", cc.SpriteFrame);;


        }.bind(this));
        //end

    },

    /**
     * 加载远程资源
     */
    remote_load() {

        //远程加载图片
        // cc.loader.load("http://127.0.0.1:8080/xxx.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());

        // }.bind(this));
        //end

        //从服务器加载mp3
        // cc.loader.load({url: "http://127.0.0.1:8080/xxx.mp3", type: "mp3"}, function(err, ret) {
        //     if(err) {
        //         console.log(err);
        //         return;
        //     }
        //     console.log(ret); //audio clip
        //     this.audio.clip = ret;
        //     this.audio.play();  
        // }.bind(this));
        //end

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

        //从服务器加载自定义文件
        // cc.loader.load({url: "http://127.0.0.1:8080/xxx.mydata", type: "mydata"}, function(err, ret) {
        //     if(err) {
        //         console.log(err);
        //         return;
        //     }
        //     console.log(ret); //audio clip
        // }.bind(this));
        //end

    },

    start () {
        this.local_load();
    },

    // update (dt) {},
});

工程截图:

 

 

 

 

E:\python3.9.13\lib\site-packages\tensorflow\lite\python\convert.py:854: UserWarning: Statistics for quantized inputs were expected, but not specified; continuing anyway. warnings.warn( WARNING: All log messages before absl::InitializeLog() is called are written to STDERR W0000 00:00:1750592469.236287 1300 tf_tfl_flatbuffer_helpers.cc:365] Ignored output_format. W0000 00:00:1750592469.236390 1300 tf_tfl_flatbuffer_helpers.cc:368] Ignored drop_control_dependency. 2025-06-22 19:41:09.237337: I tensorflow/cc/saved_model/reader.cc:83] Reading SavedModel from: C:\Users\27731\AppData\Local\Temp\tmpou2lior2 2025-06-22 19:41:09.249839: I tensorflow/cc/saved_model/reader.cc:52] Reading meta graph with tags { serve } 2025-06-22 19:41:09.249859: I tensorflow/cc/saved_model/reader.cc:147] Reading SavedModel debug info (if present) from: C:\Users\27731\AppData\Local\Temp\tmpou2lior2 I0000 00:00:1750592469.381787 1300 mlir_graph_optimization_pass.cc:425] MLIR V1 optimization pass is not enabled 2025-06-22 19:41:09.404910: I tensorflow/cc/saved_model/loader.cc:236] Restoring SavedModel bundle. 2025-06-22 19:41:10.235403: I tensorflow/cc/saved_model/loader.cc:220] Running initialization op on SavedModel bundle at path: C:\Users\27731\AppData\Local\Temp\tmpou2lior2 2025-06-22 19:41:10.478873: I tensorflow/cc/saved_model/loader.cc:471] SavedModel load for tags { serve }; Status: success: OK. Took 1241546 microseconds. 2025-06-22 19:41:10.657810: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:269] disabling MLIR crash reproducer, set env var `MLIR_CRASH_REPRODUCER_DIRECTORY` to enable. Traceback (most recent call last): File "E:\pycharm\study\计算机视觉\test2.py", line 302, in <module> deployer.convert_to_tflite_with_metadata(tflite_path, quantize=True) File "E:\pycharm\study\计算机视觉\test2.py", line 255, in convert_to_tflite_with_metadata tflite_model = converter.convert() File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\lite.py", line 1250, in wrapper return self._convert_and_export_metrics(convert_func, *args, **kwargs) File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\lite.py", line 1202, in _convert_and_export_metrics result = convert_func(self, *args, **kwargs) File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\lite.py", line 1768, in convert saved_model_convert_result = self._convert_as_saved_model() File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\lite.py", line 1749, in _convert_as_saved_model return super(TFLiteKerasModelConverterV2, self).convert( File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\lite.py", line 1494, in convert return self._optimize_tflite_model( File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\convert_phase.py", line 215, in wrapper raise error from None # Re-throws the exception. File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\convert_phase.py", line 205, in wrapper return func(*args, **kwargs) File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\lite.py", line 1146, in _optimize_tflite_model model = self._quantize( File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\lite.py", line 760, in _quantize calibrated = calibrate_quantize.calibrate( File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\convert_phase.py", line 215, in wrapper raise error from None # Re-throws the exception. File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\convert_phase.py", line 205, in wrapper return func(*args, **kwargs) File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\optimize\calibrator.py", line 258, in calibrate self._feed_tensors(dataset_gen, resize_input=True) File "E:\python3.9.13\lib\site-packages\tensorflow\lite\python\optimize\calibrator.py", line 152, in _feed_tensors self._calibrator.FeedTensor(input_array) ValueError: Cannot set tensor: Got value of type UINT8 but expected type FLOAT32 for input 0, name: serving_default_input_layer_1:0
最新发布
06-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值