Creator 版本: 1.5.2
android 上 通过以最下面的代码download 函数热更后(热更下来的只是资源,没有代码,也还没去用到这个资源),按返回键时导致异常,我返回键只是用 cc.director.loadScene 加载回上一个场景而已,请问我热更代码哪里不对?还是什么情况?
js error:: assets/src/jsb_polyfill.js line:17365 msg:TypeError: split[1].split is not a function
然后我在jsb_polyfill.js里面加了写日志打印
console.log("url:%s", url);
console.log("split: %s", JSON.stringify(split));
console.log("split[1]: %s", JSON.stringify(split[1]));
console.log("typeof split[1]: %s", typeof split[1]);
console.log("split.length: %d", split.length); // length 等于 1, 这里有问题
split = split[1].split("&");
console.log("split: %s", JSON.stringify(split));
打印结果:
涂掉的部分是 download 函数中的 第二个参数 storagePath 的值,也就是热更到本地的路径
Downloader.download = function(manifestStr, storagePath, listener){
if(_assetsManager == null){
_listener = listener;
_storagePath = storagePath;
_assetsManager = new jsb.AssetsManager("", storagePath, versionCompareHandle);
let manifest = new jsb.Manifest(manifestStr, storagePath);
_assetsManager.loadLocalManifest(manifest, storagePath);
if (!cc.sys.ENABLE_GC_FOR_NATIVE_OBJECTS) {
_assetsManager.retain();
}
if (cc.sys.os === cc.sys.OS_ANDROID) {
// Some Android device may slow down the download process when concurrent tasks is too much.
// The value may not be accurate, please do more test and find what's most suitable for your game.
_assetsManager.setMaxConcurrentTask(2);
}
_updateListener = new jsb.EventListenerAssetsManager(_assetsManager, updateCallback);
cc.eventManager.addListener(_updateListener, 1);
_assetsManager.update();
return true;
}else{
}
return false;
};
后来我把 jsb_polyfill.js 改成:
可是,这样按了返回键加载上一场景时发生异常:
debug info: jsb: ERROR: File C:/fb/cp/cocos/scripting/js-bindings/proj.android/…/auto/jsb_cocos2dx_auto.cpp: Line: 7713, Function: js_cocos2dx_Director_replaceScene
debug info: Invalid Native Object
error:: assets/src/jsb_polyfill.js line:33246 msg:Error: Invalid Native Object
jsb_polyfill.js line:33246 代码: