Java 球之间的碰撞

Java 球之间的碰撞,java,collision-detection,Java,Collision Detection,我有一种方法,可以将球反射到墙上,也可以相互反射。每个球的半径是50 public void reflectBalls(){ for(int j = 0; j < 2; j++){ if(ball[j].getY() <= NWall) ball[j].flipVertical(); else if(ball[j].getY() >= (SWall - 50)) ball[j].flipVertical(); else i

我有一种方法,可以将球反射到墙上,也可以相互反射。每个球的半径是50

public void reflectBalls(){
    for(int j = 0; j < 2; j++){
        if(ball[j].getY() <= NWall) ball[j].flipVertical();
        else if(ball[j].getY() >= (SWall - 50)) ball[j].flipVertical();
        else if(ball[j].getX() <= WWall) ball[j].flipHorizontal();
        else if(ball[j].getX() >= (EWall - 50)) ball[j].flipHorizontal();
    }
    for(int i = 0; i < 2; i++){
        for(int j = 0; j < 2; j++){
            if(i == j){
                continue;
            }else{
                double ax = (double)ball[i].getX();
                double ay = (double)ball[i].getY();
                double bx = (double)ball[j].getX();
                double by = (double)ball[j].getY();
                double distx = (ax-bx)*(ax-bx);
                double disty = (ay-by)*(ay-by);
                double distance = Math.sqrt(distx + disty);
                if(Math.floor(distance) <= 100){
                    ball[i].flipHorizontal();
                    ball[j].flipVertical();
                    ball[i].flipVertical();
                    ball[j].flipHorizontal();
                }
            }
        }
    }
}
public void reflectBalls(){
对于(int j=0;j<2;j++){
如果(ball[j].getY()=(SWall-50))ball[j].flipVertical();
如果(ball[j].getX()=(EWall-50))ball[j].flipHorizontal();
}
对于(int i=0;i<2;i++){
对于(int j=0;j<2;j++){
如果(i==j){
继续;
}否则{
双ax=(双)球[i].getX();
双ay=(双)球[i].getY();
双bx=(双)球[j].getX();
double by=(双)球[j].getY();
双距离=(ax-bx)*(ax-bx);
双倍距离=(按日期)*(按日期);
双距离=数学sqrt(distx+disty);

if(数学楼层(距离)这是您的问题-您发现球i与球j碰撞,然后将其翻转。然后您发现球j与球i碰撞,然后再次翻转它们。因此,不会发生碰撞。仅在球j>i时执行碰撞检查,并且一切正常。

您可能只翻转两次,因为您的循环将发现每次碰撞两次

最好确保不要翻转,而是让对象彼此远离。最后,让它们远离墙。否则,在与墙直接碰撞时,可能会导致球实际向外移动

作为快速解决方案,您可以更改

for(int j = i+1; j < 2; j++){
for(int j=i+1;j<2;j++){

注意
i+1
。这是“以后的每一个球”

这正是问题所在。球没有在正确的时间碰撞,但这很可能是我的数学错误。