ArrayList中的弹跳球需要检测碰撞

时间:2017-08-20 14:21:50

标签: java swing list for-loop iteration

您好我正在制作一个BouncingBall程序,其中球从墙壁反弹并相互脱离。墙很好,但碰撞是一个问题。我将Ball存储在ArrayList中,因此我可以使用for循环移动任何给定的数字。

我一直无法实施碰撞,看起来很多。我能得到的最接近的是当不应该有很多随机碰撞的地方。

最新尝试:用于检测碰撞的物理类,现在球刚刚在屏幕上运行..

public class Physics {

public static boolean Collision(BouncingBall b, ArrayList<BouncingBall> list){
    //boolean collide = false;
    for (int i = 0; i < list.size(); i++){

      if(b.getXPosition()== list.get(i).getXPosition()){
          return true;
      }

    }
    return false;
}

反弹方法本身(在BallDemo类中):

                ball.draw();
                //above here is code to make balls and add to ArrayList
            }

            // make them bounce
            boolean finished =  false;

            while (!finished) {
                myCanvas.wait(50);

                for (BouncingBall ball: balls){


                    if(Physics.Collision(ball, balls)){
                        collisionCount(ball);
                    }



                    //if ball is out of X bounds bounce it back
                else if(ball.getXPosition()>=850 || ball.getXPosition()<0){
                        ball.collision();


                    }
                    //if ball is out of Y bounds bounce it back
              else if(ball.getYPosition()>=500 || ball.getYPosition()<0){
                        ball.yCollision();

                    }
                    ball.move();
                    }
                }
        }

请注意:我知道for循环因为比较第一个球本身而发生冲突但是尝试从1开始,但仍然无法工作。

1 个答案:

答案 0 :(得分:1)

由于您将每个球与整个列表进行比较,因此它将始终与自身发生冲突。您需要在碰撞中添加一个检查,以查看它是否与自身进行比较。像

这样的东西
if (b == list.get(i)) {
    continue;
}