download failed: assets/main/import/09/09f53264-cd95-4751-99ad-d516c164dd80._cconb.dbbin, status: 40

错误截图:

在这里插入图片描述

错误原因

将 Cocos 小游戏 Web-Mobile 丢网页上展示

报错分析

.cconb 文件找不到

解决思路

先写一个程序 遍历修改 web-mobile目录下所有的.cconb格式为.bin

# 转换cconb格式 to bin
def ConvertConb2bin(dir):
    for root, dirs, files in os.walk(dir):
        path = root.replace('\\', '/')
        for f in files:
            url = '%s/%s' % (path, f)
            info = os.path.splitext(f)
            name = info[0]
            ext = info[1]
            if ext == ".cconb":
                os.rename(f"{root}/{f}", f"{root}/{name}.cconb.bin")
                print(f"{root}/{name}.cconb.bin")

然后 新建一条资源管线来处理 .cconb文件的加载

  //新加一个额外处理cconb的资源管道
  function append_cconb_convert_pip() {
    const assetManager = cc.assetManager;
    //新建一个额外处理cconb的资源管道
    assetManager.transformPipeline.append(function (task) {
      const input = task.output = task.input;
      for (let item of input) {
        if (!item.url) continue;
        //更改资源依赖
        item.url.endsWith(".cconb") && ( item.url = cc.path.changeExtname(item.url, ".cconb.bin") );
      }
    });
    //重写bin资源加载处理
    assetManager.downloader.register("bin", (url, options, onComplete) => {
      url.endsWith(".cconb.bin") ? assetManager.downloader._downloaders[".cconb"]() : assetManager.downloader._downloaders[".bin"]();
    })
  }

最后 将管线写入到项目中

# 注入脚本到项目中
def intoApplication(dir):
    content = IUtils.fromFile(f"{dir}/application.js")
    content = content.replace(
        "function topLevelImport(url) {", "%s\n\tfunction topLevelImport(url) {" % cconbPip, 1)
    content = content.replace("return loadAssetBundle(settings.hasResourcesBundle, settings.hasStartSceneBundle);",
                              "append_cconb_convert_pip();//创建cconb管道\n\treturn loadAssetBundle(settings.hasResourcesBundle, settings.hasStartSceneBundle);", 1)
    IUtils.writeInFile(f"{dir}/application.js",content)

完整的python源码:

from distutils.log import error
import os
import IUtils

# cconbPip管线
cconbPip = '''
  //新加一个额外处理cconb的资源管道
  function append_cconb_convert_pip() {
    const assetManager = cc.assetManager;
    //新建一个额外处理cconb的资源管道
    assetManager.transformPipeline.append(function (task) {
      const input = task.output = task.input;
      for (let item of input) {
        if (!item.url) continue;
        //更改资源依赖
        item.url.endsWith(".cconb") && ( item.url = cc.path.changeExtname(item.url, ".cconb.bin") );
      }
    });
    //重写bin资源加载处理
    assetManager.downloader.register("bin", (url, options, onComplete) => {
      url.endsWith(".cconb.bin") ? assetManager.downloader._downloaders[".cconb"]() : assetManager.downloader._downloaders[".bin"]();
    })
  }
'''

# 转换cconb格式 to bin
def ConvertConb2bin(dir):
    for root, dirs, files in os.walk(dir):
        path = root.replace('\\', '/')
        for f in files:
            url = '%s/%s' % (path, f)
            info = os.path.splitext(f)
            name = info[0]
            ext = info[1]
            if ext == ".cconb":
                os.rename(f"{root}/{f}", f"{root}/{name}.cconb.bin")
                print(f"{root}/{name}.cconb.bin")

# 注入脚本到项目中
def intoApplication(dir):
    content = IUtils.fromFile(f"{dir}/application.js")
    content = content.replace(
        "function topLevelImport(url) {", "%s\n\tfunction topLevelImport(url) {" % cconbPip, 1)
    content = content.replace("return loadAssetBundle(settings.hasResourcesBundle, settings.hasStartSceneBundle);",
                              "append_cconb_convert_pip();//创建cconb管道\n\treturn loadAssetBundle(settings.hasResourcesBundle, settings.hasStartSceneBundle);", 1)
    IUtils.writeInFile(f"{dir}/application.js",content)

# 入口
if __name__ == "__main__":

    web_mobileUrl = "./src/web-mobile"

    if not os.path.exists(web_mobileUrl):
        error("请将cocos打包后的 web-mobile文件夹 放入 src目录下")
    else:
        ConvertConb2bin(f"{web_mobileUrl}/assets")
        intoApplication(web_mobileUrl)

已及直接可调用的 EXE文件
点击下载

使用方法
将 web-mobile 放入 解决后的 src目录下。点击运行 main.exe 即可

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值