嗨,我正在制作一个 BouncingBall 程序,其中球从墙壁上弹起并相互弹开。墙壁很好,但碰撞是一个问题。我将球存储在 ArrayList 中,这样我就可以使用 for every 循环移动任何给定的数字。
我一直无法实现碰撞,并且查看了很多。我能得到的最接近的是存在大量不应该发生的随机碰撞的地方。
最近的尝试:物理类来检测碰撞,现在球刚刚跑出屏幕..
公开课物理{
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 循环由于将第一个球与其自身进行比较而存在冲突,但尝试将 i 从 1 开始,但仍然不起作用。
最佳答案
由于您将每个球与整个列表进行比较,因此它总是会与自身发生碰撞。您需要在 Collision 中添加一个检查,以查看它是否正在与自身进行比较。类似的东西
if (b == list.get(i)) {
continue;
}
关于java - ArrayList 中的弹跳球需要检测碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45783124/