大厅+子游戏 目前实现方式综合 全新大讨论

大厅+子游戏 目前实现方式综合 全新大讨论
惊奇的发现 不需要引入 dating.js 返回大厅

大厅热更新代码 dating.rar (1.4 KB)
老版本读经修改 main.js

1.7 最新 调取子游戏 main.js

(function () {

'use strict';
var _CCSettings = null ;

var  settings = null;

cc.INGAME = (jsb.fileUtils ? jsb.fileUtils.getWritablePath() : '/')+"ALLGame/wuxinghonghui/";

if(!cc.wuxinghonghui ){
    
    require(cc.INGAME+'src/settings.js');

    cc.wuxinghonghui =  settings = window._CCSettings;


    //重点 加入自己游戏大厅场景db 和 uuid   跳转场景和 原跳转场景一样无需在重新更改代码

    settings["scenes"].push({"url":"db://assets/dianwan/dating/dating.fire","uuid":"66RKWfaplH8KfjH3FoM4q6"});

    require(cc.INGAME+'src/project.js');

}else{

    settings = cc.wuxinghonghui;
}

window._CCSettings = undefined;




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 onStart = function () {
        cc.view.resizeWithBrowserSize(true);
        // UC browser on many android devices have performance issue with retina display
        if (cc.sys.os !== cc.sys.OS_ANDROID || cc.sys.browserType !== cc.sys.BROWSER_TYPE_UC) {
            cc.view.enableRetina(true);
        }
        //cc.view.setDesignResolutionSize(settings.designWidth, settings.designHeight, cc.ResolutionPolicy.SHOW_ALL);

      

        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);
            }
            // qq, wechat, baidu
            cc.view.enableAutoFullScreen(
                cc.sys.browserType !== cc.sys.BROWSER_TYPE_BAIDU &&
                cc.sys.browserType !== cc.sys.BROWSER_TYPE_WECHAT &&
                cc.sys.browserType !== cc.sys.BROWSER_TYPE_MOBILE_QQ
            );
        }

        // Limit downloading max concurrent task to 2,
        // more tasks simultaneously may cause performance draw back on some android system / brwosers.
        // 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;
        }


        // init assets
        cc.AssetLibrary.init({
            libraryPath: cc.INGAME +'res/import',
            rawAssetsBase: cc.INGAME +'res/raw-',
            rawAssets: settings.rawAssets,
            packedAssets: settings.packedAssets,
            md5AssetsMap: settings.md5AssetsMap
        });

        var launchScene = settings.launchScene;

        // load scene
        if (cc.runtime) {
            cc.director.setRuntimeLaunchScene(launchScene);
        }
        cc.director.loadScene(launchScene, null,
            function () {
                if (cc.sys.isBrowser) {
                    // show canvas
                    canvas.style.visibility = '';
                    var div = document.getElementById('GameDiv');
                    if (div) {
                        div.style.backgroundImage = '';
                    }
                }
                cc.loader.onProgress = null;

                // play game
                // cc.game.resume();

                console.log('Success to load scene: ' + launchScene);
            }
        );
    };

    // jsList
    var jsList = settings.jsList;
    var bundledScript = settings.debug ? cc.INGAME+'src/project.dev.js' : cc.INGAME+'src/project.js';
    if (jsList) {
        jsList = jsList.map(function (x) { return cc.INGAME+'src/' + x; });
        jsList.push(bundledScript);
    }
    else {
        jsList = [bundledScript];
    }

    // anysdk scripts
    if (cc.sys.isNative && cc.sys.isMobile) {

// jsList = jsList.concat([‘src/anysdk/jsb_anysdk.js’, ‘src/anysdk/jsb_anysdk_constants.js’]);
}

    var option = {
        //width: width,
        //height: height,
        id: 'GameCanvas',
        scenes: settings.scenes,
        debugMode: settings.debug ? cc.DebugMode.INFO : cc.DebugMode.ERROR,
        showFPS: settings.debug,
        frameRate: 60,
        jsList: jsList,
        groupList: settings.groupList,
        collisionMatrix: settings.collisionMatrix,
        renderMode: 0
    };

    cc.game.run(option, onStart);

})();

7赞

顶一下

导出资源要怎么实现呢?

1.7模拟器不能跑了么,1.5.2是可以的

require(cc.INGAME+‘src/settings.js’);
require(cc.INGAME+‘src/project.js’);
都为null

如果两个之游戏某个脚本的key和大厅某个脚本key相同了会有问题,比如大厅一个alert.js 子游戏一个alert.js 对应key相同了,之游戏alert就会出问题

2个脚本内容 都不一样 ??? 绑定 js 脚本好像 有问题 建议 换key 先解决

进入子游戏时,重复调用 cc.AssetLibrary.init 不会导致覆盖掉大厅的资源配置么?
这样的话,是不是在游戏里面就不能访问大厅的资源呢?

在重新架子啊回去 好像可以 具体原理 不明白

顶三哥

任何资源脚本场景只要key相同了就会出问题

麻烦,知道编辑器资源key在哪儿生成的不,我去改改,坑真多

对新人来说 完全看不懂写的都是什么。。。。。

1-04 16:23:36.425 18435 18457 D jswrapper: JS: settings.rawAssets undefined
01-04 16:23:36.426 18435 18457 D jswrapper: JS: [ERROR]: loadScene: Can not load the scene ‘db://assets/hall.fire’ because it was not in the build settings before playing.

Android dating.js里面的路径下面没有settings.js 从子游戏回不到大厅

路径强制 路径为 “” 即可

大神 我已经把路径设置为“” 但是还是require到子游戏自己的setttings.js
launchScene db://assets/Scene/helloworld.fire 这个是子游戏的fire 大厅的是hall.fire

var _CCSettings = null;

cc.INGAME = "";

if (!cc.dating) {
    require(cc.INGAME + 'src/settings.js');
    cc.dating = _CCSettings = window._CCSettings;
    require(cc.INGAME + 'src/project.dev.js');
} else {
    _CCSettings = cc.dating;
}

日志

01-05 10:22:56.982 13732 13753 D jswrapper: JS: btn_back clicked!!!
01-05 10:22:56.983 13732 13753 D jswrapper: JS: launchScene db://assets/Scene/helloworld.fire
01-05 10:22:56.984 13732 13753 D jswrapper: JS: [ERROR]: loadScene: Can not load the scene ‘db://assets/hall.fire’ because it was not in the build settings before playing.

大神人呢

载入 字游戏 main。js 的时候 要增加 大厅场景seeting
子游戏 main。js 增加 自己的
settings = window._CCSettings;

settings["scenes"].push({"url":"db://assets/dianwan/dating/dating.fire","uuid":"66RKWfaplH8KfjH3FoM4q6"});
settings["scenes"].push({"url":"db://assets/dianwan/denglu/denglu.fire","uuid":"f2r+DggTJDLr4gQKXqVPnT"});

我在子游戏的main.js增加了代码

if(!cc.subgame ){

    require(cc.INGAME+'src/settings.js');
    cc.subgame =  settings = window._CCSettings;

    settings["scenes"].push({"url":"db://assets/hall.fire","uuid":"7brp21UJhJsLMGvPc8eZqF"});

    require(cc.INGAME+'src/project.dev.js');

}else{

    settings = cc.subgame;
}

还是报一样的错误

01-05 12:49:52.161 21635 21657 D jswrapper: JS: btn_back clicked!!!
01-05 12:49:52.169 21635 21657 D jswrapper: JS: [ERROR]: A Class already exists with the same classname : “HelloWorld”.
01-05 12:49:52.169 21635 21657 D jswrapper: JS: [ERROR]: A Class already exists with the same cid : “280c3rsZJJKnZ9RqbALVwtK”.
01-05 12:49:52.170 21635 21657 D jswrapper: JS: ============settings: db://assets/Scene/helloworld.fire
01-05 12:49:52.173 21635 21657 D jswrapper: JS: [ERROR]: loadScene: Can not load the scene ‘db://assets/hall.fire’ because it was not in the build settings before playing.

我自己测试

if(!cc.subgame ){

    require(cc.INGAME+'assets/src/settings.js');
    cc.subgame =  settings = window._CCSettings;

    require(cc.INGAME+'assets/src/project.dev.js');

}else{

    settings = cc.subgame;
}

路径上面加了个assets 就可以正常返回了 但是这样貌似就不能跨平台了 还是哪里不对