【问题标题】:Should each area of a map have its own class?地图的每个区域都应该有自己的类吗?
【发布时间】:2013-04-12 16:44:46
【问题描述】:

警告:这里是 Xna Noobie。

我正在制作一个 2d、自上而下的 rpg,有点像口袋妖怪。在我的游戏中,除了主游戏类之外,还有一个玩家类和一个地图类。我是否应该为地图的每个区域设置单独的类(例如 Town.cs、Forest.cs、River.cs),如果是,它们是否应该从父类继承?或者我应该只有一个通用 MapRegion 类,并且让地图的每个区域都只是 MapRegion 的一个实例?

【问题讨论】:

  • “取决于”。通常,您希望将所有公共数据和功能放在一个位置(BaseClass),并将特殊数据和功能放在特殊位置(ChildClasses)。因此,如果城镇表现不同于森林或河流,则具有不同的子类。只要您记得将所有常见的东西保留在基类中,拥有很多子类就没有什么坏处。如果您想将代码从一个子类复制并粘贴到另一个子类:不要!而是将其放在基类中。并且每当您使用地图变量时,将它们设为基类类型并用合适的子类填充它们。
  • 我认为你最好有一个单独的类MapRegion 读取某种配置以在其上创建所有“东西”。如果整个区域需要表现不同,请使用 MapRegion 的子类,否则我会制作一个 MapRegion 仅由一堆图块组成。每个图块都可以指定自己的行为和事件,以便地图可以保持简单......

标签: c# map xna 2.5d


【解决方案1】:

决定取决于不同地区是否需要不同的功能。如果唯一的区别是地形/障碍物/建筑物/那种东西,那么使用通用 MapRegion 类并将不同的地图存储在外部数据文件中以供每个 MapRegion 加载会更有意义。但是,如果这些区域在代码中的处理方式存在显着差异(这对于 Pokémon 风格的游戏可能不太可能),那么您将创建不同的子类。这基本上归结为它们是功能不同还是只是保存不同的数据。

【讨论】:

  • 即便如此,您也可以通过几个不同的函数创建一个MapRegion,它接受几个Action 变量——无需继承。
【解决方案2】:

我认为为每个级别设置不同的课程并不好,但是您可以设置一些需要不同课程的特殊级别。在大多数情况下,我会创建一个基类,如果我需要一个特殊的地图,我会创建一个子类。

一个基本的地图类会有一些更通用的成员:

  1. 列表结构
  2. 列出 NPCS
  3. 背景纹理

等等……

【讨论】:

  • 这是我想知道的另一件事。我刚刚制作了一个模型,所以我可以在制作实际游戏之前测试一些基本的东西,所以我只是使用来自 Mother 3 的this 图像作为我的地图。我是否应该将每个单独的对象(例如房子、仙人掌、山脉)作为一个“结构”,而不是只有一个图像?
  • 这些结构是否有不同的属性,例如bool Passable?通常这类游戏使用瓷砖。现在是否有 一个 瓦片类或多个子瓦片类...“取决于”。 ^^;
  • 这将我们带入碰撞检测,这完全是另一个问题......
  • 我认为在地图中使用不同的结构比加载图像更好,因为它可以让你有更多的控制权
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 2021-05-25
相关资源
最近更新 更多