xeroo 287da3c5d5 更新 'README.md' | 1 year ago | |
---|---|---|
static | 1 year ago | |
README.md | 1 year ago |
方法二(建议使用):
编辑器按钮
,或者直接找到引擎安装路径引擎版本/resources/engine/bin/.cache
,删除对应平台构建缓存引擎版本/resources/engine/cocos2d/core/platform/js.js
找到function setup
方法替换如下
function setup (key, publicName, table) {
js.getset(js, publicName,
function () {
return Object.assign({}, table);
},
function (value) {
js.clear(table);
Object.assign(table, value);
}
);
return function (id, constructor) {
// deregister old
if (constructor.prototype.hasOwnProperty(key)) {
delete table[constructor.prototype[key]];
}
js.value(constructor.prototype, key, id);
// register class
if (id) {
var registered = table[id];
// ---------------------------- 旧逻辑 start ----------------------------
// if (registered && registered !== constructor) {
// var error = 'A Class already exists with the same ' + key + ' : "' + id + '".';
// if (CC_TEST) {
// error += ' (This may be caused by error of unit test.) \
// If you dont need serialization, you can set class id to "". You can also call \
// cc.js.unregisterClass to remove the id of unused class';
// }
// cc.error(error);
// }
// else {
// table[id] = constructor;
// }
// ---------------------------- 旧逻辑 end ----------------------------
// ---------------------------- 新逻辑 start ----------------------------
if (registered && registered !== constructor) {
if (key == "__classname__") {
delete _nameToClass[id];
} else if (key == "__cid__") {
delete _idToClass[id];
}
// console.log(`---- cc.js.setup ---- delete ${key} : ${id}`);
}
table[id] = constructor;
// ---------------------------- 新逻辑 end ----------------------------
//if (id === "") {
// console.trace("", table === _nameToClass);
//}
}
};
}
大厅、子游戏分离,子游戏分包下载
新增游戏无需更新包体,新增配置即可
简洁易懂,界面化操作
|-- assets
|-- resources
|-- manifest // 项目manifest文件存放目录
|-- Script
|-- hotUpdate
|-- HotUpdateEvent.ts // 热更新事件
|-- MainHotUpdate.ts // 主包热更新脚本
|-- SubGameHotUpdate.ts // 子游戏热更新脚本
|-- VersionTool.ts // 版本工具
|-- subGame
|-- SubGameCtrl.ts // 子游戏控制器
|-- SubGameInterface.ts // 子游戏接口相关
|-- SubGameMgr.ts // 子游戏管理器
|-- BackHall.ts // 回大厅统一脚本
|-- GameConst.ts // 游戏常理存放
|-- HallSceneCtrl.ts // 大厅场景控制脚本
|-- Intro.ts // 初始化脚本(同时也挂载在Intro场景)
|-- hot-update-packages // 热更包目录
|-- manifest
|-- server // 本地服务器根目录,远程服务器目录结构可参考此目录
|-- ... // 生成热更后,会复制一份至该目录,所以此处热更包永远是最新的
|-- http-server //mac http-server 执行文件
|-- http-server.bat //windows http-server 执行文件
|-- subGameConfig.json // 子游戏配置
|-- versions // 存放历史各个版本热更包
|-- packages
|-- hot-update-tools // 热更插件目录
npm i
命令进行初始化插件使用 Cocos Creator 2.4.9
打开该项目
服务器
使用本地服务器
npm i http-server -g
安装 http-server,mac用户要用sudo安装ip
为自己设备ip
ip
为自己设备ip
使用远程服务器查看 GameConst.ts 中的 server_ip
引用自行修改逻辑
热更插件操作
构建项目【项目->构建发布->构建】
点击热更插件中的生成热更包按钮
会自动删除不在包内的子游戏文件夹,以及对config、index进行版本标识
编译
cocos 自带
编译项目【项目->构建发布->编译】
安装 apk(一般在 [项目目录]\build\jsb-link\frameworks\runtime-src\proj.android-studio\app\build\outputs\apk\debug
)
android studio 自行搜索教程
添加游戏文件夹,配置为bundle
,在文件夹中新建与bundle同名启动场景
,之所以同名详见子游戏启动逻辑,如有需要可修改改逻辑
构建项目【项目->构建发布->构建】
添加热更配置
点击生成热更包按钮
,如果子游戏很多,文件很多,可能会有延时,如无报错,等待即可
服务器
使用本地服务器无需任何操作
使用远程服务器需要把最新版本替换至远程服务器
服务器配置中添加新子游戏配置
修改主包中 hall 场景内容,比如修改为 hall1
构建项目【项目->构建发布->构建】
主包配置中的热更版本+1
点击生成热更包按钮
,如果子游戏很多,文件很多,可能会有延时,如无报错,等待即可
服务器
使用本地服务器无需任何操作
使用远程服务器需要把最新版本替换至远程服务器
修改子包中 game1 场景内容,比如修改为 game11
构建项目【项目->构建发布->构建】
子包 game1 配置中的热更版本+1
点击生成热更包按钮
,如果子游戏很多,文件很多,可能会有延时,如无报错,等待即可
服务器
使用本地服务器无需任何操作
使用远程服务器需要把最新版本替换至远程服务器
子游戏命名(文件夹名/bundle 名)最好不要包含特殊符号,否则可能导致启动失败
构建时请不要勾选 MD5
编译前切记删除构建目录下[项目目录]\build\jsb-link\assets
,不在包内
的子游戏文件夹。
添加游戏务必配置为 bundle
bundle 间尽量避免相互引用,公共资源放在主包中