4399小游戏不支持某些格式,所以需要进行处理
cocos3.X打包时,animation文件会被打包为.cconb格式,此格式不在4399支持的格式中,会被删除
,bin格式的文件也不在支持的格式中……
后来搜索到了本站大佬:极客柒 的文章
https://blog.csdn.net/qq_39162566/article/details/124189655
但是文章中的代码不能直接使用,故而对其步骤进行了一定的简化和修改
一:对包体中所有不被支持的文件修改
新建python文件:changeResourceNameFor4399.py
from distutils.log import error
import os
#更换4399不支持的文件格式
# 转换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.ani")
print(f"{root}/{name}.cconb.ani")
if ext == ".bin":
os.rename(f"{root}/{f}", f"{root}/{name}.bin.dbbin")
print(f"{root}/{name}.bin.dbbin")
# 入口
if __name__ == "__main__":
web_mobileUrl = "./web-mobile"
if not os.path.exists(web_mobileUrl):
error("请将cocos打包后的 web-mobile文件夹 放入同级目录下")
else:
ConvertConb2bin(f"{web_mobileUrl}/remote")
二:在加载文件时新建处理这些文件的资源管道
我是直接在加载文件的方法里面添加处理
public LoadAssets(lesson: LessonInfo): void {
if (!lesson || !lesson.AssetURL) return;
this._loadState = AssetLoadState.Ready;
this._loadStateChanged?.(this._loadState, 0);
let lastProgress = 0;
let self = this;
//新建一个额外处理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 = path.changeExtname(item.url, ".cconb.ani"));
item.url.endsWith(".bin") && (item.url = path.changeExtname(item.url, ".bin.dbbin"));
}
});
//重写ani资源加载处理
if window.h5api{
// assetManager.downloader.register("ani", (url, options, onComplete) => {
// url.endsWith(".cconb.ani") ? assetManager.downloader.download(lesson.Id, url, ".cconb", options, onComplete)
// : assetManager.downloader.download(lesson.Id, url, ".ani", options, onComplete)
// })
// assetManager.downloader.register("bin", (url, options, onComplete) => {
// url.endsWith(".bin.dbbin") ? assetManager.downloader.download(lesson.Id, url, ".bin", options, onComplete)
// : assetManager.downloader.download(lesson.Id, url, ".dbbin", options, onComplete)
// })
}
...后面为原有的代码
}
被注释的代码本来是为了处理原有的被转换过来的格式的加载,可是极客柒大佬的代码中这段的api已经没有了,我改写后发现写得不对,但是催得急,而且只要项目中原本没有这些格式的文件,也不会影响运行,我就暂时没有去管它了…
三:把py文件丢到build里面,运行它
四:把web-mobile中的文件压缩成.zip
压缩前最好搜索一下看有没有转换成功
然后在4399后台把压缩包传上去就行了
作为小游戏,很多4399支持的很多格式的文件其实都没有用到,所以不被支持的格式,转就完事儿了!