同一ArrayList内的碰撞检测

时间:2014-08-01 05:19:28

标签: java arraylist collision-detection

在几天的搜索过程中,我找不到解决方案。我有一个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;
}

1 个答案:

答案 0 :(得分:2)

  1. 您忘记添加i != j

  2. 的条件
  3. 我怀疑你应该更换以下条件:


  4. boxPool.get(i) != boxPool.get(j)
    

    使用:

    !boxPool.get(i).equals(boxPool.get(j))
    

    此外,无需对所有元素进行双循环,您始终可以从j = i + 1开始,然后您不必检查{ {1}}:

    i != j