3

我正在使用 LWJGL 和 Java 1.6 编写一个 2d 自上而下的 RPG。到目前为止,我的渲染和输入方法工作正常,并且刚刚开始编写游戏逻辑。

所以我有一个名为 World 的类,它包含一个 ArrayList 的实体。我想在游戏中实现简单的碰撞(使用相交的正方形),应该没问题。我现在唯一的问题是如何访问我的列表的单个单元格而不必遍历它。我只能想出碰撞方法,这些方法在每个实体内部执行并遍历我的世界中的所有实体。这根本不快,但我真的不知道该怎么做才能让它更快。

我的游戏是基于瓷砖的,但运动不是瓷砖到瓷砖的,可以走更小的部分,这避免了我简单地使用二维数组......

是否有处理实体及其碰撞的标准方法?(或者可能是一种处理位于 ArrayList 内的实体之间的冲突的方法?)

4

1 回答 1

1

处理碰撞实体的标准方法是空间分区。你的世界是一个由离散点组成的二维平面。每一块都可以位于其中一个点上。点的数量决定了平面的分辨率——点越多,视觉效果越好,你需要执行的计算就越多。这是权衡。

您可以维护实体位置和实体本身之间的映射,其中位置由覆盖 equals 和 getHashCode 的对象表示。位置对象包含两个成员 - X 和 Y 坐标。

注意-您必须以适当和有效的方式覆盖。

因此,如果您知道它的坐标,您可以非常快速地访问每个实体,重新洗牌只是删除一个实体并使用新坐标添加它(这可以针对局部性进行优化)并且碰撞检测是微不足道的 - 只需检查相同的位置是否被某个实体。

我还会向您推荐关于 SO的这个问题。

于 2012-08-30T18:18:22.730 回答