版本2.0.10,我在某一个prefab上换一张图片以后,cocos热更以后不会改变这张图片~但是我变更这个prefab的某张图片的位置以后,cocos热更以后会改变这个位置,代码的热更是完全没问题的~ @jare @panda
@傻狍子
单单只改节点位置,可以热更到,同时改节点位置和图片,不可以热更到
只能给你建议,我也不确定哪个环节出错了,把更新下来的资源和你们版本构建出来资源做下比对,看看文件是不是正常更新了,你先确认下这个情况,如果资源不一样,那就再确认下生成的更新包里面资源是否正确,一步一步排查。
如果prefab替换的资源,是热更新下来的,并且保证资源确实下载下来的情况下,基本可以断定是你添加搜索路径的问题,检查一下main.js,是不是修改搜索路径的时候,已经把src/setting.js给require进去了。
你说的这些刚刚排查完,然后现在资源可以了,又蹦出来个新问题~我们第一次热更以后,正常,但是第二次进入游戏用的还是老资源~main.js里~也加了搜索路径
// QQPlay window need to be inited first
if (false)
{
BK.Script.loadlib(‘GameRes://libs/qqplay-adapter.js’);
}
window.boot = function ()
{
var settings = window._CCSettings;
window._CCSettings = undefined;
if (!settings.debug)
{
var uuids = settings.uuids;
var rawAssets = settings.rawAssets;
var assetTypes = settings.assetTypes;
var realRawAssets = settings.rawAssets = {};
for (var mount in rawAssets)
{
var entries = rawAssets[mount];
var realEntries = realRawAssets[mount] = {};
for (var id in entries)
{
var entry = entries[id];
var type = entry[1];
// retrieve minified raw asset
if (typeof type === 'number')
{
entry[1] = assetTypes[type];
}
// retrieve uuid
realEntries[uuids[id] || id] = entry;
}
}
var scenes = settings.scenes;
for (var i = 0; i < scenes.length; ++i)
{
var scene = scenes[i];
if (typeof scene.uuid === 'number')
{
scene.uuid = uuids[scene.uuid];
}
}
var packedAssets = settings.packedAssets;
for (var packId in packedAssets)
{
var packedIds = packedAssets[packId];
for (var j = 0; j < packedIds.length; ++j)
{
if (typeof packedIds[j] === 'number')
{
packedIds[j] = uuids[packedIds[j]];
}
}
}
var subpackages = settings.subpackages;
for (var subId in subpackages)
{
var uuidArray = subpackages[subId].uuids;
if (uuidArray)
{
for (var k = 0, l = uuidArray.length; k < l; k++)
{
if (typeof uuidArray[k] === 'number')
{
uuidArray[k] = uuids[uuidArray[k]];
}
}
}
}
}
function setLoadingDisplay()
{
// Loading splash scene
var splash = document.getElementById('splash');
var progressBar = splash.querySelector('.progress-bar span');
cc.loader.onProgress = function (completedCount, totalCount, item)
{
var percent = 100 * completedCount / totalCount;
if (progressBar)
{
progressBar.style.width = percent.toFixed(2) + '%';
}
};
splash.style.display = 'block';
progressBar.style.width = '0%';
cc.director.once(cc.Director.EVENT_AFTER_SCENE_LAUNCH, function ()
{
splash.style.display = 'none';
});
}
var onStart = function ()
{
cc.loader.downloader._subpackages = settings.subpackages;
cc.view.enableRetina(true);
cc.view.resizeWithBrowserSize(true);
if (!false && !false)
{
if (cc.sys.isBrowser)
{
setLoadingDisplay();
}
if (cc.sys.isMobile)
{
if (settings.orientation === 'landscape')
{
cc.view.setOrientation(cc.macro.ORIENTATION_LANDSCAPE);
}
else if (settings.orientation === 'portrait')
{
cc.view.setOrientation(cc.macro.ORIENTATION_PORTRAIT);
}
cc.view.enableAutoFullScreen([
cc.sys.BROWSER_TYPE_BAIDU,
cc.sys.BROWSER_TYPE_WECHAT,
cc.sys.BROWSER_TYPE_MOBILE_QQ,
cc.sys.BROWSER_TYPE_MIUI,
].indexOf(cc.sys.browserType) < 0);
}
// Limit downloading max concurrent task to 2,
// more tasks simultaneously may cause performance draw back on some android system / browsers.
// You can adjust the number based on your own test result, you have to set it before any loading process to take effect.
if (cc.sys.isBrowser && cc.sys.os === cc.sys.OS_ANDROID)
{
cc.macro.DOWNLOAD_MAX_CONCURRENT = 2;
}
}
var launchScene = settings.launchScene;
// load scene
cc.director.loadScene(launchScene, null,
function ()
{
if (cc.sys.isBrowser)
{
// show canvas
var canvas = document.getElementById('GameCanvas');
canvas.style.visibility = '';
var div = document.getElementById('GameDiv');
if (div)
{
div.style.backgroundImage = '';
}
}
cc.loader.onProgress = null;
console.log('Success to load scene: ' + launchScene);
}
);
};
// jsList
var jsList = settings.jsList;
if (false)
{
BK.Script.loadlib();
}
else
{
var bundledScript = settings.debug ? 'src/project.dev.js' : 'src/project.js';
if (jsList)
{
jsList = jsList.map(function (x)
{
return 'src/' + x;
});
jsList.push(bundledScript);
}
else
{
jsList = [bundledScript];
}
}
var option = {
id: 'GameCanvas',
scenes: settings.scenes,
debugMode: settings.debug ? cc.debug.DebugMode.INFO : cc.debug.DebugMode.ERROR,
showFPS: !false && settings.debug,
frameRate: 60,
jsList: jsList,
groupList: settings.groupList,
collisionMatrix: settings.collisionMatrix,
}
// init assets
cc.AssetLibrary.init({
libraryPath: 'res/import',
rawAssetsBase: 'res/raw-',
rawAssets: settings.rawAssets,
packedAssets: settings.packedAssets,
md5AssetsMap: settings.md5AssetsMap,
subpackages: settings.subpackages
});
cc.game.run(option, onStart);
};
// main.js is qqplay and jsb platform entry file, so we must leave platform init code here
if (false)
{
BK.Script.loadlib(‘GameRes://src/settings.js’);
BK.Script.loadlib();
BK.Script.loadlib(‘GameRes://libs/qqplay-downloader.js’);
var ORIENTATIONS = {
'portrait': 1,
'landscape left': 2,
'landscape right': 3
};
BK.Director.screenMode = ORIENTATIONS[window._CCSettings.orientation];
initAdapter();
cc.game.once(cc.game.EVENT_ENGINE_INITED, function ()
{
initRendererAdapter();
});
qqPlayDownloader.REMOTE_SERVER_ROOT = "";
var prevPipe = cc.loader.md5Pipe || cc.loader.assetLoader;
cc.loader.insertPipeAfter(prevPipe, qqPlayDownloader);
window.boot();
}
else if (window.jsb)
{
var isRuntime = (typeof loadRuntime === 'function');
if (isRuntime)
{
require('src/settings.js');
require('src/cocos2d-runtime.js');
require('jsb-adapter/engine/index.js');
}
else
{
require('src/settings.js');
require('src/cocos2d-jsb.js');
require('jsb-adapter/jsb-engine.js');
if (cc.sys.isNative)
{
console.log('>>>>>Debug, ', cc.sys.isNative)
var hotUpdateSearchPaths = cc.sys.localStorage.getItem('HotUpdateSearchPaths');
if (hotUpdateSearchPaths)
{
jsb.fileUtils.setSearchPaths(JSON.parse(hotUpdateSearchPaths));
}
}
}
cc.macro.CLEANUP_IMAGE_CACHE = true;
window.boot();
}
下面有我main.js
的代码,是我加入时间不对么?
明显有问题啊,你都require了js脚本,才读取热更里面的 简而言之,
你把你这个放在main.js第一行就好了
放在require之上就行了对吧
不要怕,放到一行去,放到那似乎资源读取有问题。
你说的是这样么?这样的话cc就开始报错了。。。。大佬
请只把截图中的那几句放到第一行,不要多,也不要少
呼叫大佬~
你为什么一定要把require也提前了,说了截图里的不要多也不要少
谢谢大佬的支持,~排查了好久,差点怀疑人生

