衝突可能と呼ばれるオブジェクトのセットが World クラスにあります。
Set<Collidable> collidables = new HashSet<Collidable>();
(ボールの) 衝突検出システムを開発しようとしているときに、X と Y の 2 つの 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 パラメーターを使用して衝突可能オブジェクトをチェックしようとしていますが、衝突可能オブジェクトの新しいインスタンスを作成しているため (以前に生成されたものとまったく同じパラメーターを使用していますが)、それは常に false になります:
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
ただし、2 つの for ループを使用する全体的な理由は、すべての衝突可能ですべての更新を反復する必要がないため、これは受け入れられません。
私が求めているのは、セット全体を反復することなく、指定した場所に衝突可能性があるかどうかを取得する方法を知っている人はいますか?