在几天的搜索过程中,我找不到解决方案。我有一个ArrayList
个碰撞元素,我想迭代并计算碰撞。我做了几次类似的尝试,但我现在很难过。
碰撞方法(比赛一次叫嘀嗒)
public void iterateCollision()
{
if(iterateBoxes)
{
if(iterateBoxes)
{
for(int i=0;i<boxPool.size();i++)
{
for(int j=i+1;j<boxPool.size();j++)
{
if(!(boxPool.get(i).equals(boxPool.get(j))) && checkCollision(boxPool.get(i), boxPool.get(j)))
{
boxPool.get(i).colliding = true;
boxPool.get(j).colliding = true;
}
}
}
}
}
}
以下是那些想要查看它的人的碰撞检测方法:
public boolean checkCollision(BaseAABB box1, BaseAABB box2)
{
//This is just to get the center vector of the bounding boxes.
Vector2f c1 = getAABBCenter(box1);
Vector2f c2 = getAABBCenter(box2);
if(Math.abs(c1.x - c2.x) > (box1.width + box2.width)) return false;
if(Math.abs(c1.y - c2.y) > (box1.height + box2.height)) return false;
return true;
}
答案 0 :(得分:2)
您忘记添加i != j
我怀疑你应该更换以下条件:
boxPool.get(i) != boxPool.get(j)
使用:
!boxPool.get(i).equals(boxPool.get(j))
此外,无需对所有元素进行双循环,您始终可以从j = i + 1
开始,然后您不必检查{ {1}}:
i != j