【问题标题】:Generating code vs file format生成代码与文件格式
【发布时间】:2013-10-12 22:46:01
【问题描述】:

所以我和我的朋友发生了一个我们无法解决的争论。他正在编写一个通用的网络游戏库和一个地图编辑器。地图编辑器将地图保存为 XML,但地图编辑器也可以加载一个 Lua 脚本,将地图的详细信息导出到一个 Javascript 文件中,看起来像这样(他不想发布代码,所以这只是一个sn-p 更改名称):

// 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 并从中生成对象之间的权衡是什么?

【问题讨论】:

  • 这里有很多问题。这不适合 SO 设计的问答格式。将问题分解为更集中的项目并再次提问。见help center
  • @MikeW 编辑了我绝对需要知道的问题。
  • 这真的是一个基于意见的问题吗?我不知道代码生成是加载数据的有效策略。
  • 可能不是主题可以产生基于意见的答案,而是您提出问题的形式(似乎您希望我们与您或您的朋友站在一边)。可能如果您将问题放在更“工程权衡风格”中,它可能是可以挽救的。例如。 “鉴于……等等,等等……这种方法和这种方法之间的权衡是什么……等等。”
  • @LorenzoDonati 这是更好的形式吗?

标签: javascript xml lua code-generation game-engine


【解决方案1】:

一般来说,从另一个脚本加载元数据,可以为脚本生成器增加关于数据如何发送、显示等方面的灵活性。例如,您可以将完整的数学表达式、条件等作为加载的一部分脚本,将由脚本解析器(解释器)无缝解析和加载。使用 XML 或 JSON 做同样的事情可能更难(想象一下通过 XML 发送一个表达式来做Miller Cylindrical Projection,即时)。

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

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

【讨论】:

    猜你喜欢
    • 2021-05-28
    • 2010-10-24
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多