微信小游戏
Estella 能把同一个项目导出为微信小游戏。你为微信目标构建引擎,从编辑器导出游戏, 再用微信开发者工具打开结果。
为微信构建引擎
Section titled “为微信构建引擎”微信目标用微信的 WXWebAssembly 垫片编译 C++ 内核:
node build-tools/cli.js build -t wechat# 侧模块,仅当你的游戏用到时:node build-tools/cli.js build -t physics-wechat # 物理node build-tools/cli.js build -t spine-wechat # Spine(一次构建 3.8 + 4.1 + 4.2)node build-tools/cli.js build -t basis-wechat # KTX2 / 压缩纹理node build-tools/cli.js build -t videodec-wechat # 视频(MPEG-1 wasm 解码器)从编辑器导出
Section titled “从编辑器导出”-
在项目设置 → 打包 → 微信中,填写 AppID。屏幕方向是项目级设置——在项目设置 → 显示 → 屏幕方向里设一次即可(它驱动下面
game.json的deviceOrientation)。 -
打开文件 → 构建…,在 Package Project 对话框里选 WeChat 平台, 检查构建场景列表,点击 Package。Estella 会烘焙资源,把 SDK 与你的 脚本打包(用 esbuild 打成 CommonJS),转换场景,并写出一个独立的小游戏包。
-
用微信开发者工具打开输出目录,编译、测试、提交。如果 AppID 留空了, 在开发者工具里填进
project.config.json即可。
输出目录包含 game.js(入口,负责引导 game-bundle.js —— SDK + 你的脚本)、
game.json / project.config.json(微信配置)、asset-manifest.json、以
scenes/<名字>.json 存放的场景,以及 wasm/ 目录 —— 引擎加上场景实际需要的
侧模块。构建里的每个场景都是 SceneManager.switchTo 的切换目标——非启动场景在
首次切换时才加载(见场景)。
在打包对话框勾选压缩纹理,把 PNG 烘焙为 KTX2 —— 包更小、首屏更快。两个微信 特有的细节,都已自动处理:
- Basis 转码器以
basis-wechat侧模块的形式随包发布——构建一次(见上),否则 导出会失败并给出确切命令。 - 微信的代码包只接受白名单后缀,
ktx2不在其中——所以导出器把每个.ktx2暂存为.ktx2.bin,运行时两种拼写都能解析。导出器还会在project.config.json里为每个 暂存的自定义扩展名(.skel、.atlas、.bin等)生成packOptions.include规则,让开发者工具打包并读取它们。
分包(subpackages)
Section titled “分包(subpackages)”惰性资源分组会成为 game.json 里的微信 subPackages。运行时,
assets.loadGroup('level2') 底层会触发 wx.loadSubpackage,于是关卡按需下载,而不会
撑大初始包:
{ "deviceOrientation": "landscape", "subPackages": [ { "name": "level2", "root": "subpackages/level2" } ]}- 保持在 4 MB 主包限制以内:把按需内容移到
subpackages/<name>/——见 资源。导出会设置bigPackageSizeSupport,超限的包 在开发者工具里仍可预览——但上传照样卡限制。 - 压缩纹理 —— 见上文;这是包体最大的一笔节省。
- 在微信开发者工具里测试,而不只是浏览器——文件系统、存储与套接字后端都与 Web 不同。
- 在游玩中预加载下一关的分组(
loadGroup),让分包下载不卡过渡。