1

我正在用纯 Java 开发一个 2d 自上而下的游戏,直到现在我已经有了一个噪声映射系统,它可以像 Minecraft 一样与大块瓷砖(和实体)一起工作。

我存储图块的方式是创建一个int[s * s]数组,其中s块的一侧具有的大小(以图块为单位)。然后,我有一个 Tiles 的静态数组,其中包含游戏中每个可能的 Tile,并用整数索引。这些是存储在int[s * s]每个块中的整数。现在,我希望能够覆盖图块,例如不可见的生成图块、墙壁、树木和过渡图块(例如当草变成沙子时:沙子上应该有草的边界,这将是一个新图块)。

问题是块的每个坐标中只能存储一个整数。另一种方法是将瓦片的实际实例放在块内,并使覆盖的瓦片指向它们正下方的瓦片(如堆栈),但我认为这是一种不好的方法。我测试的另一种方法是制作一组瓷砖列表,这也很糟糕。

哪个是实现这一目标的好方法?

4

1 回答 1

1

通常,您会将磁贴和对象的存储分开。

  • 您将有一个int [w*h]或类似的瓷砖本身,每平方只允许一个瓷砖。
  • 另外,您可以ArrayList [w*h]在每个正方形中存储一个实体列表。该数组将包含null空方格,因此大多数方格(其中没有实体)的额外存储成本是最小的。

当然还有其他方法,但这具有既简单又非常有效的优点。

唯一真正的缺点是您必须编写单独的代码来处理图块和实体 - 但由于您通常以不同的方式处理图块和实体,因此这不太可能是一个大问题。

于 2013-03-19T02:53:59.427 回答