其实游戏已经做很远了,为了真实性删了很多添加的东西…

本来可能已经开始描述第一个版本了,万万没想到发布到 web 时发生问题:编译产物报错

项目 体验地址项目地址

TL;DR

  • 完成基本的击打、胜利条件、球的恢复
  • 编译与发布

完成情况

基本的 gameplay 已经完成 —— 两块板子一个球,板子的后面是各自的「门」。

门选择 Area2D[1],原因是这个控件专门控制物理状态与检查物理状态;墙壁使用StaticBody2D

板子和球目前均使用 KinematicBody2D,因为可以方便的模拟物理状态,反弹完全不需要代码描述。但板子可能应该换成RigidBody2D,这样可以模拟更多的真实物理,例如摩擦力,受力。不过目前需要求证:控制端使用 RigidBody 是否合理

完全没什么好讲的,非常简单的实现

编译与发布

由于 native 的关系,运行时会把 cpp 编译,并编译成动态链接库。例如 osx 使用 .dylib,那么 web 跟原生相关的肯定是 .wasm 。官方提供了原生端的案例[2],而开发时也只编译了 osx 版本。

直到要验证发布到 github pages 时,出大问题,浏览器只显示 abort(undefined)

目前不能使用最新的 emscripten 编译你的 wasm

经历各种尝试,例如直接从源码编译新的 template,但编译时也频出问题,甚至 debug 无法成功编译,接着进入无尽改编译参数等各种操作……

直到看到这个 issue [3]

因为之前一直使用的 emscripten 版本已经是 26,所以猜是不是跟版本有关系,于是换成 17,成了

于是有另一个猜想:官方发布的模板是否因为也使用 17 的版本发布,会导致 dll 对应不上。业务代码必须同样使用 17 编译代码才可以使用?

交给 github action

因为刚刚的 issue,发现这个作者对 godot 发布已经了然于胸,最后发现他提供了一个 ci 配置[4],于是参考这个配置写了一个工作流,现在可以把整个发布路程交到 github 了

记得提交 export_presets

可能可以发现,前面大部分 action 都是失败的

如果选择了 github 的 .gitignore 模板,这个文件默认会被忽略。但缺少这个文件 ci 无法工作 —— 获取不到发布配置

so,记得提交,接着等待一切结束。顺带一提,github action 的配置应该不高,编译 godot-cpp 属实膀胱局

下一篇应该讲有完整 UI 的第一个版本,结束


  1. 使用 Area2D ↩︎

  2. GDNative C++示例 ↩︎

  3. Building for HTML5 stopped working for emsdk 2.0.18+ ↩︎

  4. 2shady4u/godot-cpp-ci ↩︎