【问题标题】:Is it better to hardcode in, or leave it to external XML files硬编码还是留给外部 XML 文件更好
【发布时间】:2011-09-14 12:18:35
【问题描述】:

我正在创建一个基于 2D 的 RPG 游戏。类似于 Gameboy 的口袋妖怪。基本上,我的游戏地图是由 x x x 大小的地形创建的。还有风景对象(树木、灌木等)以及难以处理的东西(即标志、门、物品等)。目前,我一直在对这些对象进行硬编码。问题是,每次我添加风景对象、地形图块或其他任何东西时,都需要我为它添加一个类,指定一些不同的数据等. 基本上,我觉得我必须做很多重复的任务才能做这么简单的事情。

我担心以后我的项目会变得无法管理。每一块新的地形、风景或其他对象都继承自一个名为“GridElement”的类。

那么,将所有的瓷砖、风景等信息放入一个外部 XML 文件并在运行时加载,还是继续硬编码这些元素会更好吗?

主要问题是,这些元素中的大多数都需要对其应用特定的功能。其中一些需要在被踩到时调用事件。一些元素也是动态的(图块每隔几秒钟就会改变一次,例如水、花等)。

感谢您的帮助!

干杯!

【问题讨论】:

  • @Mike Kwan,感谢您的编辑。我什至没有注意到错误:)

标签: external hardcoded


【解决方案1】:

作为一个宽松的规则,你应该只在你想要表示行为时创建一个新类,并用你的数据控制这个类的参数。

在您的情况下,您可能需要为您的花卉、灌木、墙壁和此类事物设置一个风景类。然后,您可以通过调用函数来设置位图、动画速度来自定义此类的对象。那么这些数据来自哪里并不重要,它可以是硬编码的,来自对象工厂或从 xml 读取。

当您使用可交互对象时,您确实需要额外的类,但请尽量使它们更通用而不是具体。因此,如果您想在用户与对象交互时显示一条消息,您有一个通用的交互类,而不是符号类。然后可以将此类用于标志、书架、外观神秘的物品。

当涉及到特殊活动时,您有几个选择。最简单的是创建一个通用事件类,它可以指导新演员出现在屏幕上或将对象授予玩家。或者,您可以将函数指针/委托传递给当用户触发某些触发器时调用的对象(即,步入正方形,击败怪物)。最后,最复杂但最有可能使用 Pokemon 和类似游戏的,您可以创建/使用自己的脚本语言。

【讨论】:

  • 所以我想我明白你在说什么。那么您是否建议我将 XML 用于瓷砖、风景对象等,并使用脚本语言(例如 Lua)来处理所有交互事件、动画等?我真的喜欢这个主意。我本来打算在项目的后期实现 Lua,但是,我仍然很喜欢你的想法。
  • 如果您正在创建可重用的游戏引擎,我会使用 XML 或某些文件格式 - 但您不必过早地这样做!首先确保你有一个好的游戏内核,它是否有趣,是否值得扩展?在您构建它时,我只会对数据进行硬编码。如果您将所有这些对象创建代码抽象出来(即对象工厂),您可以轻松地将其撕掉并稍后用您的 xml 解析器替换。
  • 这一切的主要困难在于它有一个内置的地图编辑器。我希望很多事情成为可能,比如添加新事物等等。我可能会尽快开始构建这样的系统,不是现在,但很快。这样,当时机成熟时,使用起来会容易得多。我将继续在我的程序中引入 Lua。
【解决方案2】:

最好将数据放入数据文件中,然后编写代码来处理这些数据文件。有多种原因:您提到一个,数据更易于管理(即,它会更清晰地组织并且更容易找到)。另一个重要的好处是它使数据更容易更改。与其他人合作时会产生巨大差异,但即使是单独工作时,您在配置文件中而不是在代码本身中调整所有游戏性值也会容易得多。

您的警告确实意味着您通常必须为不同种类的元素创建不同的类,然后在 XML 中引用这些类;例如:

<grid_element>
  <class>GrassElement</class>
  <image>dark_grass.png</image>
  <xpos>10</xpos>
  <ypos>10</ypos>
</grid_element>

但尽可能远离硬编码的东西并在数据文件中进行。例如,可以在 XML 中定义被调用的不同事件:

<step_event>somethingOrOther</step_event>

【讨论】:

  • 我能解释一下吗?我不只是在寻找答案,我需要一个理由。对不起:)
  • 我添加了几个原因。还有更多原因,但这些是我想不到的最重要的原因。
猜你喜欢
  • 1970-01-01
  • 2014-06-24
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 2014-09-11
  • 1970-01-01
  • 2018-04-24
相关资源
最近更新 更多