Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 生成代码与文件格式_Javascript_Xml_Lua_Code Generation_Game Engine - Fatal编程技术网

Javascript 生成代码与文件格式

Javascript 生成代码与文件格式,javascript,xml,lua,code-generation,game-engine,Javascript,Xml,Lua,Code Generation,Game Engine,所以我的朋友和我发生了一场无法解决的争论。他正在编写一个通用网络游戏库和一个地图编辑器。地图编辑器将地图保存为XML,但地图编辑器也可以加载一个Lua脚本,该脚本将地图的详细信息导出到类似以下内容的Javascript文件中(他不想发布代码,因此这只是一个名称已更改的片段): 其思想是,游戏库只需运行此代码,而不必解析地图文件并动态生成对象。地图编辑器中生成代码的Lua脚本可以被任何想要为不同库以不同语言输出代码的人修改。(不限于脚本语言) 我从未听说过这个想法,通常我希望地图数据是JSON或X

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

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

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


因此,考虑到他的库是用javascript编写的,他的映射可以生成javascript来加载文件,那么运行生成的代码与解析JSON/XML以及从中生成对象之间的权衡是什么?

一般意义上,从另一个脚本加载元数据,可以为脚本生成器提供更多关于数据发送、显示等方式的灵活性。例如,您可以将完整的数学表达式、条件等作为加载脚本的一部分,脚本解析器(解释器)将对其进行无缝解析和加载。使用XML或JSON做同样的事情可能会更难(想象一下通过XML动态发送一个表达式)

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


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

这里有很多问题。这不适合SO设计的问答格式。将问题分解为更集中的项目,然后再次提问。请看@MikeW编辑的我绝对需要知道的问题。这真的是一个基于观点的问题吗?我不知道代码生成是加载数据的一种有效策略。可能不是生成基于意见的答案的主题,而是您提出问题的形式(似乎您希望我们站在您或您朋友的一边)。也许如果你把你的问题放在一个更“工程权衡风格”的地方,它是可以挽救的。例如,“鉴于……诸如此类……这种方法和这种方法之间的权衡是什么……等等”@LorenzoDonati这是一种更好的形式吗?
// 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));
...