为游戏引擎制作 API 或脚本语言?

Making an API or scripting language for game engine?

我目前正在 java 和游戏中编写一个非常简单的 2.5D 游戏引擎。这基本上只是我正在从事的一个有趣的项目,所以实现功能所需的时间是没有问题的,因为我总是可以把它放在一边并随时处理它。话虽如此,我正计划实施一种自定义类型的脚本系统。基本上,该引擎将是一个 shell 的 2.5D 游戏,可以通过简单的脚本对其进行修改和扩展。到目前为止,我对如何解决这个问题有以下想法,但我不确定什么是实用的。

  1. 编写一个非常简单的脚本语言和一个简单的解析器来检查脚本的文件夹并运行它们。
  2. 制作一个 java library/API 允许您通过普通的旧 java
  3. 修改客户端和服务器上的部分游戏
  4. 使用已经创建的非常简单的语言,例如 lua 用于游戏的可扩展部分

我真的想过选项1是我想做的,但是我从来没有真正做过这样的事情,我想知道是否有人可以推荐我在这里应该做什么。如果我确实要编写一种简单的语言,我只是在寻找一些 material 或有关此类主题的文档,我会不会只看人们如何编写基本的 compilers/interpreters?

简短的回答是 2,选择 API。这是向游戏引擎添加或更改功能的最简单方法。

创建自己的脚本语言和解析器对每个开发人员来说都很诱人。这是一次很好的学习经历,但也是一个缺点。当您开始编写脚本并且结果不是您所期望的时,您不知道错误是在您的脚本中还是在解析器中。您将需要来自解析器的一些调试信息,也许是一些堆栈跟踪,即使是非常简单的脚本语言也可能开始接管您的项目。当您开始编写脚本时,您可能会感到缺少的功能受到限制,您习惯于编写 java 代码并可能开始扩展脚本语言。

创建自己的语言的一些缺点对于所有现有的语言也是如此。如果你真的需要一种非常自由的方式来扩展你的游戏引擎,你可以选择那条路,但我不推荐它。您仍然会冒着将注意力从游戏引擎转移到脚本实现的风险。

一种思考方式也是从模组作者的角度。他们想用新的脚本语言、现有的脚本语言还是 java 编写?答案很可能是 java,可能不是新语言。