大家好,

上周我试过使用GameMaker,虽然我爱这个引擎和IDE,但我卻苦于编码体验。缺乏严格的类型检查和内置编辑器的局限性(对Feather说一声抱歉!),重构和扩展就如同走进迷mine阵。

我想拥有现代开发环境的灵活性(VS Code或WebStorm),所以我开始开发一个允许我以最喜爱的编辑器写成类型化代码的东西。作为编程语言,我决定使用Typescript,因为它可以编译成JS,后者与GML有很多相似之处。

这个想法是通过CLI工具来实现的,CLI工具作为一个构建层对你的代码进行构建。使用 Typescript 写你的逻辑,并且把所有东西都编译成-native-GML 和 .yy 文件,这些文件GameMaker可以完美理解(通常可以从GameMaker IDE打开和读取)。

这样带来了许多好处,例如:

  • 可以与任意编辑器(VS Code或WebStorm)进行使用,编码体验更好、插件更完善和类型校验更强大。
  • 完整的类型安全性:没有更多的猜测变量是否存在或把错误的参数传给函数(目前这个项目还不是完全类型化,但已经有了auto-completion的名字)。
  • 自动生成资源类型:这个工具会扫描你的项目并以你的精灵、声音、房间等产生类型。

工作流程看起来像这样

  • 在终端中运行gmts watch: gmts watch
  • 在VS Code编辑你的。ts 文件。
// 定义玩家形状
interface IPlayer扩展GMObject {
  速度 : 数字;
  }

  const obj_player = 定义对象<IPlayer>({
    // 会被转化成Create事件
    onCreate () {
      this. 速度 = 2;
    },

    // 会被转化成Step事件
    onStep() {
      var h = 键盘检测(ord("D")) - 键盘检测(ord("A"));
      var v = 键盘检测(ord("S")) - 键盘检测(ord("W"));

      if (h != 0 || v != 0) {
        var _dir = 点方向(0, 0, h, v);
        var x_dir = 长度向量_x(this.速度, _dir);
        var y_dir = 长度向量_x(this._dir) ;

        移动和碰撞(x_dir, y_dir, all);
      }
    },
  });
  • 工具只重新编译改动过的文件即刻。
  • GameMakerpick up 变化,并按平常的方式点“Run”。

⚠️ 小心警告:这是一个PoC

这个项目在早期阶段(我把大部分代码写在了周末之后),并且我需要你们的大神们反馈社区。如果这是一个你们实际使用的工作流程,我想知道还有哪些功能你想看(例如具体的GML库映射)。

我还尝试过GMRT javascript,但后来不想继续,因为以下几个原因

*还要依赖内置的代码编辑器和Feather,但这对我来说不是很好。
GMRT只有beta版本,并且需要很多设置(而我正在工作的cli可以在一条命令下安装和运行)。

我希望看到你们的看法、批评和如果你们经历了类似的DX痛苦。有关工具更多信息请查阅gamemaker-typescript,本工具全部开源。