我正在使用纯Java进行2D自上而下的游戏,直到现在我已经有了一个噪音映射系统,可以像Minecraft那样使用大块的磁贴(和实体)。
我存储切片的方法是创建一个int[s * s]
数组,其中s
是切片一侧的大小(在切片中)。然后,我有一个静态的Tiles数组,其中包含游戏中的每个可能的tile,用整数索引。这些是存储在每个块中的int[s * s]
中的整数。现在,我希望能够覆盖瓷砖,例如隐形的产卵瓷砖,墙壁,树木和过渡瓷砖(例如当草变成沙子时:沙子上应该有一个草的边界,这将是一个新的瓷砖)。
问题是只能在块的每个坐标中存储一个整数。另一种方法是将块的实际实例放在块内,并使叠加的块指向它们正下方(如堆栈),但我认为这是一种糟糕的方法。我测试的另一种方法是制作一系列瓷砖列表,这也非常糟糕。
哪种方法可以实现这一目标?
答案 0 :(得分:1)
通常,您会将图块和对象的存储分开。
int [w*h]
或类似物,
只允许每平方一块瓷砖。ArrayList [w*h]
来存储一个列表
每个方格中的实体。该数组将包含null
为空
正方形,因此大多数正方形的额外存储成本(即
其中没有实体)是最小的。当然还有其他方法,但这样做的好处是既简单又高效。
唯一真正的缺点是你必须编写单独的代码来处理磁贴和实体 - 但是由于你通常不同地处理磁贴和实体,所以这不太可能是一个大问题。