Java中的2D平铺游戏优化

时间:2013-03-19 02:41:45

标签: java 2d storage tile

我正在使用纯Java进行2D自上而下的游戏,直到现在我已经有了一个噪音映射系统,可以像Minecraft那样使用大块的磁贴(和实体)。

我存储切片的方法是创建一个int[s * s]数组,其中s是切片一侧的大小(在切片中)。然后,我有一个静态的Tiles数组,其中包含游戏中的每个可能的tile,用整数索引。这些是存储在每个块中的int[s * s]中的整数。现在,我希望能够覆盖瓷砖,例如隐形的产卵瓷砖,墙壁,树木和过渡瓷砖(例如当草变成沙子时:沙子上应该有一个草的边界,这将是一个新的瓷砖)。

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

哪种方法可以实现这一目标?

1 个答案:

答案 0 :(得分:1)

通常,您会将图块和对象的存储分开。

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

当然还有其他方法,但这样做的好处是既简单又高效。

唯一真正的缺点是你必须编写单独的代码来处理磁贴和实体 - 但是由于你通常不同地处理磁贴和实体,所以这不太可能是一个大问题。