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

标签 java swing list for-loop iteration

嗨,我正在制作一个 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/

相关文章:

调用 List.remove(index) 时出现 java.lang.UnsupportedOperationException

java - 如何从亚马逊 EMR HDFS 远程读取(或任何其他 hadoop 远程服务器)

java - "ResourceBundle"整个文件?

java - 有没有办法将 jMenuBar 移动到 jFrame 顶部以外的其他位置?

java - JVM 退出时是否自动释放 native 屏幕资源?

javascript - 使用 Angular 将项目添加到列表顶部

java - classCastException 请帮助我了解真正的概念

java - 使用 Selenium 查找内部不间断空间的链接

java - 缓存 JTable 行

list - 列表中的最后一个元素使用 ocaml List.fold_left