在独立游戏开发一段时间之后,会有这样的需求,想要做一个app大厅将所有独立游戏整合到一个大厅项目中,并且大厅和子游戏独立更新;
#1. 将独立游戏打入大厅整包中
1. ccc项目发布中资源获取路径都可从cc.url.raw()获取, cc.url.raw = res/raw-assets/;
2. 既然资源都可以如此获取,自然子项目发布文件也可以拷贝到此目录下,作为大厅整包发布;
3.热更新的项目管理也一样,只要在子游戏的main.js中设置第一搜索路径即可;
#2. 大厅修改 【以大厅为横板,第一子游戏为竖版作为笔记案例;】
1. 更改main.js,主要添加热更路径和横屏切换<这里只做android切换>
#3. 子游戏需改 【参照了论坛大厅+子游戏demo修改】 文章底部将会提供实例代码下载
1. 子游戏main.js也是主要修改热更搜索路径,主要做了移除之前的搜索路径列表,添加子游戏新的搜索路径列表
jsb.fileUtils.setSearchPaths([]);
jsb.fileUtils.addSearchPath(cc.url.raw('resources/single_games/game1'), true);
jsb.fileUtils.addSearchPath(jsb.fileUtils.getWritablePath() + 'single_games/game1/', true);
备注: 这里需要注意在require('src/project.js')的时候需要判断重复加载
if (!cc.game1) {
cc.game1 = 1;
require('src/project.js');
}
2.下方和大厅一样添加自身的横竖屏切换代码
var size = cc.view.getFrameSize();
cc.view.setFrameSize(size.height, size.width);
cc.view.setDesignResolutionSize(size.height, size.width, cc.ResolutionPolicy.FIXED_HEIGHT);
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity","changedOrientation", "(I)V", 2); //1横2竖
3.子游戏添加了dating.js文件主要用于跳转回大厅
dating中的搜索路径设置
jsb.fileUtils.setSearchPaths([]);
var hall_download = jsb.fileUtils.getWritablePath() + "hall_donwnload";
jsb.fileUtils.addSearchPath(hall_download, true);
dating中不重新require project.js
添加横竖屏切换代码
4. 删除掉发布出来的 jsb_polyfill.js 文件
5. 此时可以将发布出来的 src/ res/ 放入大厅发布目录 res/raw-assets/resources/下
安卓横竖屏切换代码
#4. 每个独立游戏都有自己的字体文件,然而大多数时候大厅和所有子游戏用的都是同一个字体文件ttf,要是打入整包中字体会无限重复,随着打入包体的
子游戏数目越多包体会加大很多.这里想办法让所有子游戏都使用大厅的字体文件
main.js中的cc.AssetLibrary对资源的管理都通过jsb_polyfill.js文件中操作, ttf字体文件类型比较特殊, 在生成的字体json文件中可以发现,
都存放_rawFiles数组中, import文件夹内; 只要把第一次加载jsb_polyfill.js文件时,的字体资源用变量缓存, 之后只要调取字体资源就将之返回, 可通用大厅字体.
if (cc.AssetLibrary) {
if (cc.AssetLibrary) {
var rawPath = cc.AssetLibrary.getLibUrlNoExt(this._uuid) + "/" + this._rawFiles[0];
if (tmpTtfPath == null) {
tmpTtfPath = rawPath
}
return tmpTtfPath? tmpTtfPath : rawPath;
}
}