经过跟踪调试发现如果不热更新的话,scene instanceof cc.Scene判断后,确认sceneAsset.scene是一个场景的实例。
如果热更新成功后,通过sceneAsset.scene得到的scene是一个数组,数组的内容为:0: /Users/*/Library/Developer/CoreSimulator/Devices/B15B6180-8B20-4028-A29D-714FAAD058E1/data/Containers/Data/Application/C2CBDB81-6725-4CD9-B280-026FB5C6094B/Documents/remote-assets/, 1: /Users/*/Library/Developer/CoreSimulator/Devices/B15B6180-8B20-4028-A29D-714FAAD058E1/data/Containers/Data/Application/C2CBDB81-6725-4CD9-B280-026FB5C6094B/Documents/remote-assets/。
可以看出来这个数组的内容是本地的searchPath(通过获得的可写路径拼出来的),两个元素还是重复的, scene被赋值为这个数组是系统的bug么?
为什么走热更新的话,sceneAsset.scene会被赋值为这个数组呢?是cc.AssetLibrary.loadAsset(uuid, function(error, sceneAsset) {这个代码决定了加载后的sceneAsset.scene的类型么?
jsb_polyfiil.js中代码段如下:
_loadSceneByUuid: function(uuid, onLaunched, onUnloaded) {
cc.AssetLibrary.loadAsset(uuid, function(error, sceneAsset) {
var self = cc.director;
self._loadingScene = “”;
var scene;
if (error) {
error = "Failed to load scene: " + error;
cc.error(error);
if (false) {
console.assert(false, error);
}
} else {
scene = sceneAsset.scene;
if (scene instanceof cc.Scene) {
scene.id = sceneAsset.uuid;
self.runScene(scene, onUnloaded, onLaunched);
} else {
error = “The asset " + uuid + " is not a scene”;
cc.error(error);
scene = null;
}
}
if (error && onLaunched) {
onLaunched(error);
}
});
}