同じコレクションを2回繰り返しているので、削除するアイテムのリストを作成し、すべての衝突が検出されたら削除する必要があります。
そのようです:
private boolean checkCollisions()
{
ArrayList toRemove = new ArrayList();
for (Sprite r1 : z_sorted_sprites)
{
for (Sprite r2 : z_sorted_sprites)
{
//...
if (me.intersects(other))
{
//...
toRemove.add(r1);
toRemove.add(r2);
}
else
{
//...
}
}
}
z_sorted_sprites.removeAll(toRemove);
return collision;
}
2つのスプライトが衝突すると、それぞれが toRemove
リストに2回追加されることに注意してください。 forループを変更することで、これを防ぐことができます( z_sorted_sprites
が List
であると仮定して)
for (int i = 0; i < z_sorted_sprites.size(); i++)
{
Sprite r1 = z_sorted_sprites.get(i);
for (int j = i + 1; j < z_sorted_sprites.size(); j++)
{
Sprite r2 = z_sorted_sprites.get(j);
//...
}
}
さて、あなたの戻り値があなたが思っているものを返すのは確実ですか?現在、リスト内の最後の2つのスプライトが衝突しない限り、falseを返します。衝突があればtrueを返すようにするには、行を取り除く collision = false;
衝突回数を返す方が便利かもしれませんが、 ...