生成代码与文件格式

Generating code vs file format

本文关键字:文件 格式 代码      更新时间:2023-09-26

所以我和我的朋友有一个我们无法解决的争论。他正在编写一个通用的网页游戏库和一个地图编辑器。地图编辑器将地图保存为 XML,但地图编辑器也可以加载一个 Lua 脚本,将地图的详细信息导出到 Javascript 文件中,如下所示(他不想发布代码,所以这只是一个名称更改的片段(:

// This probably isn't valid code, but this is the idea of the code generator
(function() {
Game.Level1 = function (state) {
    GameEngine.Group.call(this);
            var Object0 = new Game.Lo(new GameEngine.Point(654 , 975.13), 15, state);
            var slot123 = new GameEngine.TimeSlot(123);        //Start
            slot123.addEvent(new GameEngine.Event(Object0, "x", "current", 15, 200));
...

这个想法是游戏库将只运行此代码,而不必解析地图文件并动态生成对象。地图编辑器中生成代码的Lua脚本可以被任何想要为不同库以不同语言输出代码的人修改。(不限于脚本语言(。

我从未听说过这个想法,通常我希望地图数据采用标准格式,如 JSON 或 XML,并让游戏库解析它。

因此,鉴于他的库是用javascript编写的,并且他的map可以生成javascript来加载文件,那么运行生成的代码与解析JSON/XML并从中生成对象之间有什么权衡?

在一般意义上,从另一个脚本加载元数据,可以为脚本生成器提供关于如何发送、显示数据等的灵活性。例如,您可以将完整的数学表达式、条件等作为加载脚本的一部分,这些脚本将由脚本解析器(解释器(无缝解析和加载。使用XML或JSON做同样的事情可能更难(想象一下,通过XML发送一个表达式来执行米勒圆柱投影,在动态中(。

我见过很多应用程序创建自己的脚本语言(MAXscript,Maya的MEL(以为用户提供灵活性的情况。这些可能与您朋友使用 Java 脚本加载元数据的情况不同。但恕我直言,它是一个连续的频谱,从元数据文本文件开始,到 XML、JSON、表达式解析,再到成熟的脚本解析。

另一方面,发送复杂的脚本将意味着暴露部分代码库。此外,每个人都知道XML的作用,您可以期望非程序员使用/修改XML文件。他们这样做很舒服。他们甚至可能不舒服地阅读他们认为的"程序"或"脚本"。 我在我的公司亲眼目睹了这一点,艺术家们不安地修改Lua文件。如果它是一个简单的文本文件,他们很乐意修改相同的信息。可能也有一些安全问题,但我真的不太熟悉它,所以我不能评论。