游戏马上就要上线了~求cocos引擎组大佬的帮助,

版本2.0.10,我在某一个prefab上换一张图片以后,cocos热更以后不会改变这张图片~但是我变更这个prefab的某张图片的位置以后,cocos热更以后会改变这个位置,代码的热更是完全没问题的~ @jare @panda

1赞

@huanxinyin

@傻狍子

单单只改节点位置,可以热更到,同时改节点位置和图片,不可以热更到

只能给你建议,我也不确定哪个环节出错了,把更新下来的资源和你们版本构建出来资源做下比对,看看文件是不是正常更新了,你先确认下这个情况,如果资源不一样,那就再确认下生成的更新包里面资源是否正确,一步一步排查。

如果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第一行就好了

1赞

https://github.com/cocos-creator/tutorial-hot-update/pull/28 看下我提交的pull,示例有问题,他们没有合并我的。

1赞

放在require之上就行了对吧

不要怕,放到一行去,放到那似乎资源读取有问题。

你说的是这样么?这样的话cc就开始报错了。。。。大佬

请只把截图中的那几句放到第一行,不要多,也不要少

这样吗?

呼叫大佬~

你为什么一定要把require也提前了,说了截图里的不要多也不要少

1赞

这样么???:sweat:

:3:谢谢大佬的支持,~排查了好久,差点怀疑人生

@2690628842 你们那个苹果不是被拒了? 后来咋解决的?