- 方法一(定制js引擎从2.4.9版本迁移出只保证2.4.9版本正常使用)
- 打开编辑器
- 项目->项目设置->自定义引擎
- 去掉使用内置的JavaScript引擎勾选
- 选择项目中的customEngine
- 重启编辑器
- 方法二(建议使用):
- 点击编辑器右上角
编辑器按钮
,或者直接找到引擎安装路径 - 找到构建缓存
引擎版本/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
打开该项目 -
服务器
-
使用本地服务器
- 下载nodejs并安装,windows 可能需要配置好环境变量
- 执行 cmd 命令
npm i http-server -g
安装 http-server,mac用户要用sudo安装 - windows 用户执行脚本
- mac 用户执行脚本
- 替换 GameConst.ts 中的
ip
为自己设备ip
- 替换 subGameConfig.json 中的
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 间尽量避免相互引用,公共资源放在主包中