Java 球碰撞检测-半径计算-接近完成

Java 球碰撞检测-半径计算-接近完成,java,android,collision,Java,Android,Collision,你好:)我完全迷路了。我有两个球在屏幕上浮动。我还有一个方法可以检查是否存在冲突,以及是否存在冲突的方法名“collide:) 当两个球彼此成直线运动时,碰撞良好。问题如图所示: 因此,这些方法是: public final float ball_radius = 2.4f; // ball image has 48 width public boolean isColliding(Ball ball) { distance = Math.sqrt((ball.image_center

你好:)我完全迷路了。我有两个球在屏幕上浮动。我还有一个方法可以检查是否存在冲突,以及是否存在冲突的方法名“collide:)

当两个球彼此成直线运动时,碰撞良好。问题如图所示:

因此,这些方法是:

public final float ball_radius = 2.4f; // ball image has 48 width
public boolean isColliding(Ball ball)
{
    distance = Math.sqrt((ball.image_center_x - this.image_center_x)*(ball.image_center_x - this.image_center_x)+(ball.image_center_y - this.image_center_y)*(ball.image_center_y - this.image_center_y));
    if(distance <= 2*ball_radius)
        return true;
    /*
    float sumRadius = 9.6f;
    float sqrRadius = sumRadius * sumRadius;

    float distSqr = (xd * xd) + (yd * yd);

    if (distSqr <= sqrRadius)
    {
        return true;
    }*/

    return false;
}

 void Collide(Ball ball1, Ball ball2)
{
    double dx = (ball1.x - ball2.x) + dt * (ball1.vx - ball2.vx);
    double dy = (ball1.y - ball2.y) + dt * (ball1.vy - ball2.vy);

    // if collision swap velocities
    if (Math.sqrt(dx * dx + dy * dy) <= 2*ball_radius) {
        double tempx = ball1.vx;
        double tempy = ball1.vy;
        ball1.vx = ball2.vx;
        ball1.vy = ball2.vy;
        ball2.vx = tempx;
        ball2.vy = tempy;
    }
}

   private  void moveBalls(){
    for (int i = 0; i < balls.size(); i++) {
        Ball ball1 = balls.get(i);
        for (int a = i + 1; a < balls.size(); a++) {
            Ball ball2 = balls.get(a);
           if(ball1.isColliding(ball2)) {
               ball1.Collide(ball1, ball2);
               checkHealthAndChangeColor(ball1, ball2);
           }
                //catchMP.start();
        }
    }
    for (int i = 0; i < balls.size(); i++) {
        balls.get(i).step();
    }
}
public final float ball_半径=2.4f;//球图像有48个宽度
公共布尔isColliding(Ball-Ball)
{
距离=Math.sqrt((ball.image\u center\u x-this.image\u center\u x)*(ball.image\u center\u x-this.image\u center\u x)+(ball.image\u center\u y-this.image\u center\u y)*(ball.image\u center\u y-this.image\u center\u y));

如果(distance@FrankN.Stein,但当我有一个48/48的球的图片时,这意味着球的半径=24。当我们得到第一个球中心点和第二个中心点之间的距离,并检查差异时,它应该起作用。我认为聚集碰撞表面,使用碰撞角度或法线在该表面上反射球只是为了澄清-你说球的图像宽度是48,但你把半径设置为
2.4f
。它不应该是
24f
IsColliding
看起来是正确的,我认为问题在于方法
Collide
,如果它们“现在”碰撞,你为什么要考虑“下一个”球的位置(你已经检查过了)?肉桂:屏幕就像100f/100f——老实说,我不明白它是怎么工作的:D。我刚刚检查过,如果我把一个球放在(50f,97.6f)上,它是否放在中间底部(它接触到屏幕边缘)——这就是为什么它有4.8f。是的,你说得对:)@huseyintugrulbuyukisik碰撞有效-碰撞发生后,球在正确的方向上漂浮,但检查不起作用。AndreaGhidini刚刚进行了第二次检查-现在删除了它,但没有任何改变。它们仍然重叠。