我正在使用LWJGL和Java 1.6编写一个2d自上而下的RPG。到目前为止,我的渲染和输入方法工作正常,并开始编写游戏逻辑。
所以我有一个名为World的类,它拥有一个实体的ArrayList。我想在游戏中实现简单的碰撞(使用交叉方块),这应该没问题。我现在唯一的问题是如何访问我的List的单个单元格而不必遍历它。我只能提出在每个实体内部执行的碰撞方法,并迭代我的世界中的所有实体。这根本不快,但我真的不知道该怎么做才能让它更快。
我的游戏是基于平铺的,但是移动不是平铺到平铺,可以走小部分,这避免了我简单地使用二维数组......
是否有处理实体及其碰撞的标准方法? (或者可能是一种处理ArrayList内部实体之间冲突的方法?)
答案 0 :(得分:1)
处理碰撞实体的标准方法是通过空间分区。你的世界是一个由离散点组成的二维平面。 每件都可以位于其中一个点上。点的数量决定了飞机的分辨率 - 点越多,视觉效果越好,你必须执行的计算越多。这是权衡。
您可以在实体的位置和实体本身之间维护一个映射,其中位置由覆盖equals和getHashCode的对象表示。 location对象包含两个成员 - X和Y坐标。
注意 - 你必须以适当和有效的方式覆盖。
因此,如果您知道其坐标,您可以非常快速地访问每个实体,重新排列只是删除一个实体并添加新坐标(这可以针对地点进行优化)并且碰撞检测很简单 - 只需检查是否位于同一位置由某个实体占据。
我还会在SO上推荐你this question。