【问题标题】:Items in a 2d tile based game基于 2d 瓷砖的游戏中的项目
【发布时间】:2013-03-09 10:08:44
【问题描述】:

我正在用 Java 制作一个基于 2d 瓷砖的游戏,我想知道在世界上存储物品的最佳方式是什么。过去我一直使用与世界大小相同的数组,但我想制作非常大的世界,而且我知道事实上这不是一个好主意。所以我只是想知道最好的方法是什么?

【问题讨论】:

  • java.util.List 或 java.util.Map 取决于您要如何查找

标签: java roguelike


【解决方案1】:

如果您定义图块的类型,例如通过 int,您可以使用其中的一位来指示是否有项目。 您存储在按 x 坐标排序的 List 中的项目本身(如果 x 坐标相同,则使用 y 坐标作为第二个排序属性)。

通过这种方式,您可以非常快速地检测到图块上是否有项目(O(1),而不是仅在有项目时才在 List<Item> 中搜索。在列表中,您可以使用二分查找(首先与 x 坐标相关,并且在所有具有相同 x 坐标的项目的子列表中使用二分查找想要的 y 坐标)O(log(n)) [n =项目数]。

如果您想节省内存,我会考虑使用基本数据类型来指定图块(例如 int)并存储您的世界,例如在int[][]

【讨论】:

    【解决方案2】:

    项目列表及其 (x,y) 坐标应该也适用于非常大的世界。

    【讨论】:

    • 即使 99% 的数组设置为 null,它仍然会占用尽可能多的内存,就好像它们都已满一样,所以我希望有一些高效的东西
    • 要存储列表,请使用 java.util 中的容器之一,例如java.util.ArrayList 或 java.util.List
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    相关资源
    最近更新 更多