打包h5时 _virtual_cc-xxxx.js文件中 downloadBundle方法内调用downloadScript,如果我想在启动时自定义downloadScript这个方法,按照引擎提供的cc.assetManager.downloader.register(".js",handler) 想自定义处理,结果根本不起作用,使用cc.assetManager.downloader.downloadScript=function(){}
同样也不起作用,通过观察,在downloadBundle内部直接调用的downloadScript,如果想实现自定义downloadScript的话目前只找到了这种解决方案
//这里使用自定义方法来处理 url
cc.assetManager.downloader.downloadScript = function (
url: string,
options: any,
onComplete: any
) {
if (url == "assets/internal/index.js") {
url = scriptMap.get("/assets/internal/index.js")!
} else if (url == "assets/resources/index.js") {
url = scriptMap.get("/assets/resources/index.js")!
} else if (url == "assets/main/index.js") {
url = scriptMap.get("/assets/main/index.js")!
}
return downloadScript.call(this, url, options, onComplete)
}
cc.assetManager.downloader._downloaders["bundle"] = function (
nameOrUrl: string,
options: any,
onComplete: any
) {
var bundleName = basename(nameOrUrl)
var url = nameOrUrl
if (!REGEX.test(url)) {
if (cc.assetManager.downloader.remoteBundles.indexOf(bundleName) !== -1) {
url =
cc.assetManager.downloader.remoteServerAddress + "remote/" + bundleName
} else {
url = "assets/" + bundleName
}
}
var version = options.version || cc.assetManager.downloader.bundleVers[bundleName]
var count = 0
var config = url + "/config." + (version ? version + "." : "") + "json"
var out: any = null
var error: any = null
cc.assetManager.downloader._downloaders[".json"](
config,
options,
function (err: any, response: any) {
error = err || error
out = response
if (out) {
out.base = url + "/"
}
if (++count === 2) {
onComplete(error, out)
}
}
)
var jspath = url + "/index." + (version ? version + "." : "") + "js"
// 这里我只是需要修改 jspath路径而已
// 这里只是将downloadScript 改成 cc.assetManager.downloader.downloadScript
cc.assetManager.downloader.downloadScript(jspath, options, function (err: any) {
error = err || error
if (++count === 2) {
onComplete(error, out)
}
})
}
这里cc.assetManager.downloader._downloaders[“bundle”] 大部分都是拷贝过来的内容,请问有更好的方法吗?感觉很少有人有这样的需求,不过还是建议官方能优化一下,例如我在执行cc.game.init 之前 通过cc.assetManager.downloader.register注册的方法可以执行