我在 World 类中有一个名为 collidable 的对象的集合:
Set<Collidable> collidables = new HashSet<Collidable>();
在尝试开发碰撞检测系统(用于球)时,我为 X 和 Y 做了两个 for 循环。
cboxX = (int) Math.floor(position.x - RADIUS);
cboxY = (int) Math.floor(position.y - RADIUS);
cboxW = Math.abs((int) Math.ceil(nextPosition.x + RADIUS) - (int) Math.floor(position.x - RADIUS));
cboxH = Math.abs((int) Math.ceil(nextPosition.y + RADIUS) - (int) Math.floor(position.y - RADIUS));
for (int x = cboxX; x <= cboxW + cboxX - 1; x++)
{
for (int y = cboxY; y <= cboxH + cboxY; y++)
{
}
}
这里一切都很好。但是,在 for 循环中,我尝试使用 x 和 y 参数检查可碰撞对象,但由于我正在创建可碰撞对象的新实例(尽管参数与先前生成的参数完全相同),它总是会出现错误:
world.collidables.add(new Block(new Vector2(x, y)));
System.out.println(world.collidables.contains(new Block(new Vector2(x, y)))); //returns false
但是,如果我使用相同的块实例,它将变为 true:
Block b = new Block(new Vector2(x, y))
world.collidables.add(b);
System.out.println(world.collidables.contains(b)); //returns true
然而,这是不可接受的,因为有两个 for 循环的全部原因是不必遍历每个可碰撞的、每次更新。
我要问的是,有没有人知道一种方法来获取可碰撞对象是否在我指定的位置,而不必遍历整个集合?