生成代码与文件格式

所以我和我的朋友有一个无法解决的争论。他正在编写一个通用的网络游戏库和地图编辑器。地图编辑器以XML格式保存地图,但是该地图编辑器也可以加载一个导出地图详细信息到类似下面的Javascript文件的Lua脚本(他不想发布代码,所以这只是一个具有更改名称的摘录):

// 这可能不是有效的代码,但这是代码生成器的想法
(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编写的,并且他的地图可以生成用于加载文件的JavaScript代码,运行生成的代码与解析JSON/XML并从中生成对象之间的权衡是什么?

点赞
用户988143
用户988143

在通用意义上,从另一个脚本加载元数据可以为脚本生成器提供更多灵活性,例如,您可以将完整的数学表达式、条件语句等作为已加载脚本的部分,由脚本解析器进行无缝解析和加载。使用XML或JSON做同样的事情可能会更难(想象一下通过XML在运行时发送一个Miller圆柱形投影表达式)。

我见过很多情况下应用程序创建自己的脚本语言(MAXscript、MEL等),以提供更大的灵活性给用户。这可能与您朋友使用JavaScript加载元数据不相同。但在我看来,它是一个连续的谱系,从元数据文本文件,到XML、JSON、表达式解析,到完整的脚本解析。

另一方面,发送复杂的脚本将意味着公开部分您的代码库。而且,每个人都知道XML的用途,您可以期望一个非程序员使用/修改XML文件。他们对此很舒适。如果他们认为是“程序”或“脚本”,他们甚至不太舒适阅读它。我在公司亲身看到过这种情况,艺术家们不愿意修改Lua文件,但对于同样的信息,如果是一个简单的文本文件,他们就可以轻松修改。也可能存在一些安全问题,但我确实不太熟悉,所以无法评论。

2013-10-07 13:21:21