您好我正在制作一个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开始,但仍然无法工作。
答案 0 :(得分:1)
由于您将每个球与整个列表进行比较,因此它将始终与自身发生冲突。您需要在碰撞中添加一个检查,以查看它是否与自身进行比较。像
这样的东西if (b == list.get(i)) {
continue;
}