在过去我们已经多次尝试将Mine-imator从GameMaker中移植出去,这是一项非常费力且复杂的任务,如果是手动尝试,肯定会花费数年时间。 作为参考,目前的代码库超过90000行(把每一行看作是一条指令,每个特性都由数千行交织在一起的网络组成),这对任何人来说都是一个巨大的任务,因为所有特性都是由多个开发人员在10年多的时间里添加的。 这还不包括填补GameMaker功能空白所需要的额外代码,如绘制GUI,处理键盘/鼠标输入和使用着色器渲染几何图形。 我们的最终目标是从GameMaker语言(GML)切换到具有更高性能、内存管理和多平台能力的新编程语言,其中c++是最佳选择。
考虑到任务的性质,大约3个月前,我决定尝试一种2.0的新方法,让脚本自动读取代码库中的文件,找出所使用的函数和变量,并逐行将其转换为可工作的(且非常优化的)c++代码。 让一个程序作为编译器,并在GML-> c++之间进行转换,也可以让团队继续使用GameMaker作为开发工具(IDE)进行测试,同时让c++在最终版本发布时发挥优势。
经过一些实验后,我能够使用c#脚本将整个代码库转换为c++,不少于20秒(相比之下,手动转换需要几年时间)。 填写的问题仍然坚持说差距GameMaker功能的大部分剩余的工作在哪里,以及确保转换代码没有错误,取得了同样的行为作为GML通过仔细比较的行为1.2.9 1.2.9和c++版本。
请参阅下面左边的GML代码片段和右边的转换后的c++代码片段(由脚本在几毫秒内自动创建)。 手动执行此操作并进行测试以确保其工作正常,并修复常见错误导致的错误可能需要花费数小时。

在移植了代码后,我开始着眼于能够在这个新的c++环境中添加一些之前在GameMaker中不可能添加的新功能,包括进一步优化性能,添加多线程,多监视器支持, 更先进的3D渲染(如批量渲染和推动世界进口商)和迫切需要的Mac OS/Linux支持。
总而言之,经过多年的努力,我终于能够将Mine-imator移植到c++中,这无疑是我所做过的最具挑战性的编程任务,但也让我学到了很多,我希望由此带来的改进和特性能够在未来10年里得到无数动画师的赞赏!
【译者注:“我看不懂,但我大受震撼。”】