Java:用于存储无限游戏世界的坐标图的良好数据结构是什么?
我习惯用PHP编码,但我并不熟悉Java,这已经有一段时间了。我希望它是一个相当简单的解决方案,但是我无法通过任何方式找到任何好的示例代码,所以这里是:
我正在编写一个游戏,它发生在基于图块的地图上的2d随机生成的无限世界中(挑剔:我知道它不会真正无限。我只是期望世界变得非常大)。 map [x] [y]多维数组的常用方法最初是作为一个基本思想开始的,但由于Java没有提供像PHP这样的非整数(即负数)数组密钥的方法,我无法正确地拥有( - x,+ x,-y,+ y)带数组键的坐标系。
我需要能够在特定的x,y坐标上找到瓷砖上的对象,以及找到某个瓷砖的“相邻瓷砖”。 (如果我可以getObjectAt(x,y),我可以获得(x + 1,y)等等)
我读过四棵树和R树等。这个概念很令人兴奋,但我还没有在Java中看到任何好的,简单的示例实现。此外,我不确定这是否是我所需要的。
欢迎任何建议
谢谢
没有找到相关结果
已邀请:
11 个回复
嘘崇蔡对
为了将瓷砖对象放置在地图上,我使用
并检索对象
。 [x / y将是您想要放置的任何坐标(这允许负坐标,没有任何混乱!),“new GrassTile()”只是在地图创建期间放置某种类型的图块的示例。显然 - 如前所述 - Pair类是可替换的。 你为什么不问ArrayLists?因为数组列表比映射更加线性,并且在我看来更难以添加和检索切片,尤其是在2维上。 更新: 对于任何想知道为什么Java中没有Pair()类的人,这里有一个解释。
稼悸
或
代替数组,这当然会允许负指数 2)如果你从一开始就知道你的世界的维度,你可以修改你的getter以允许API接受负数并[线性]将它们转换为正数。因此,例如,如果你的世界是100x1000个瓷砖而你想要(-5,-100),你将有
,这将转换为
,即(45,400)
枫湃揩乾纲
稍惮
类,并使用
。使Coordinate不可变使代码更健壮,并允许缓存hashCode。
夏瓤跋棘
擅香
坐标
块坐标 块总是固定大小的真实世界坐标(比如128x128)。然后你有一个类
,你有一个固定数组(128x128),包含每个像素的所有信息。然后你把你的块存放到
,正如其他人已经解释过的那样。我会推荐一个
。 只要您的播放器位于某个区域,就会从地图加载必要的块,然后您可以访问其中的固定大小的阵列。如果块知道它放在
坐标中的位置,你甚至可以有一些支持函数,如
左右...... 顺便说一句:这也为你提供了一个简单的方法来推迟整个世界的生成,直到它真正需要:开始时,什么也没有生成,一旦在地图中访问
,尚未生成,你只需生成然后呢。或者你可以在启动时填写它,如果这对你来说更容易。 (填充无限的世界将需要很长时间,即使它是伪无限的)
吠强祷豪硅
膛嵌墒缅欠
粱委教
您可以使用整数作为键来执行自己的Map实现,并且效率更高。
屡倒雷图
杰黔轿缺