华为联机对战 SDK 适配微信开发环境

问题现象

使用 Cocos Creator 集成华为联机对战JS SDK后,导入到微信开发工具后报错如下:

VM28 WAGameSubContext.js:2 Unhandled promise rejection TypeError: Cannot read property 'Client' of undefined
	at e.<anonymous> (index.js:1467)
	at l (index.js:1426)
	at Object.next (index.js:1370)
	at index.js:1343
	at new $ (VM28 WAGameSubContext.js:2)
	at c (index.js:1319)
	at e.initSDK (index.js:1464)
	at e.start (index.js:1460)
	at cocos2d-js-min.js:1
	at r._invoke (cocos2d-js-min.js:1)(env: Windows,mg,1.05.2110110; lib: 2.24.1)

问题分析

华为联机对战 SDK 默认导出 CommonJS 模块,而在 cocos2.X 版本中使用的是插件脚本的方式导入 SDK,GOBE 被挂载在 window 下使用,当编译成微信小游戏后,微信环境下缺少 cocos 中将 GOBE 挂载到 window 的动作导致运行时找不到 GOBE 报错。

解决方案

方案一:Cocos Creator 2.x 推荐使用插件脚本的方式引入SDK

1. 将联机对战 SDK 导入 Cocos 资源管理器后,在 属性检查器 中勾选设置 导入为插件。

cke_16650.png

2. 在 Cocos 中选择项目/构建发布,选择发布平台为微信小游戏,构建成功后将在./build目录下生成微信小游戏工程。

cke_29680.png

3. 在构建好的微信小游戏工程目录下的game.js文件中添加window.GOBE = require('./src/assets/GOBE/GOBE'); 手动挂载联机对战SDK,require中的路径为GOBE.js文件的对应路径。

cke_39555.png

方案二:Cocos Creator 3.x 推荐使用外部模块方式引入SDK

1. 首先向Cocos工程下的 tsconfig.json 增加允许对包含默认导出的模块使用默认导入字段

"compilerOptions": {
    "allowSyntheticDefaultImports": true,
}

cke_51585.png

2. 在Cocos中使用ES模块的导入方式引入联机对战SDK。

cke_67028.png

3. 使用 Cocos 构建成微信小游戏工程后可直接运行。

cke_77777.png

参考文档:

模块规范 · Cocos Creator

 

posted @ 2022-05-09 10:35  华为开发者论坛  阅读(210)  评论(0)    收藏  举报