【发布时间】:2013-03-09 10:08:44
【问题描述】:
我正在用 Java 制作一个基于 2d 瓷砖的游戏,我想知道在世界上存储物品的最佳方式是什么。过去我一直使用与世界大小相同的数组,但我想制作非常大的世界,而且我知道事实上这不是一个好主意。所以我只是想知道最好的方法是什么?
【问题讨论】:
-
java.util.List 或 java.util.Map 取决于您要如何查找
我正在用 Java 制作一个基于 2d 瓷砖的游戏,我想知道在世界上存储物品的最佳方式是什么。过去我一直使用与世界大小相同的数组,但我想制作非常大的世界,而且我知道事实上这不是一个好主意。所以我只是想知道最好的方法是什么?
【问题讨论】:
如果您定义图块的类型,例如通过 int,您可以使用其中的一位来指示是否有项目。 您存储在按 x 坐标排序的 List 中的项目本身(如果 x 坐标相同,则使用 y 坐标作为第二个排序属性)。
通过这种方式,您可以非常快速地检测到图块上是否有项目(O(1),而不是仅在有项目时才在 List<Item> 中搜索。在列表中,您可以使用二分查找(首先与 x 坐标相关,并且在所有具有相同 x 坐标的项目的子列表中使用二分查找想要的 y 坐标)O(log(n)) [n =项目数]。
如果您想节省内存,我会考虑使用基本数据类型来指定图块(例如 int)并存储您的世界,例如在int[][]。
【讨论】:
项目列表及其 (x,y) 坐标应该也适用于非常大的世界。
【讨论】: