所以我和我的朋友有一个我们无法解决的争论。他正在编写一个通用的网页游戏库和一个地图编辑器。地图编辑器将地图保存为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编写的,他的地图可以生成javascript来加载文件,运行生成的代码与解析JSON / XML和从中生成对象之间的权衡是什么?
答案 0 :(得分:0)
在一般意义上,从另一个脚本加载元数据,可以为脚本生成器提供关于如何发送,显示等的更多灵活性。例如,您可以将完整的数学表达式,条件等作为加载的一部分脚本,将由脚本解析器(解释器)无缝解析和加载。使用XML或JSON做同样的事情可能更难(想象一下通过XML发送表达式来做Miller Cylindrical Projection)。
我见过很多情况,应用程序创建自己的脚本语言(Mays的MAXscript,MEL),为用户提供灵活性。这些可能与您朋友使用Java脚本加载元数据类似。但恕我直言,它是一个连续的频谱,从元数据文本文件,到XML,JSON,表达式解析,到完全成熟的脚本解析。
另一方面,发送复杂的脚本意味着暴露部分代码库。每个人都知道XML的作用,并且您可以期望非程序员使用/修改XML文件。他们很乐意这样做。即使阅读他们所谓的“程序”或“剧本”,他们也可能感到不舒服。我在我的公司看过第一手资料,艺术家们不安地修改了一个Lua文件。如果它是一个简单的文本文件,他们很乐意修改相同的信息。可能还有一些安全问题,但我真的不熟悉它,所以我无法发表评论。