如何在JAVA中检测collison?

如何在JAVA中检测collison?,java,Java,我只想在球相遇时把球分成两半 这是我的球线代码然后 class Ball extends Thread { public Ball(Canvas c,double ran1,double ran2) { box = c; num1=ran1; num2=ran2;} public void draw() { Graphics g = box.getGraphics(); g.f

我只想在球相遇时把球分成两半 这是我的球线代码然后

class Ball extends Thread
    {   
        public Ball(Canvas c,double ran1,double ran2)   { box = c; num1=ran1; num2=ran2;}
        public void draw()
        {   
            Graphics g = box.getGraphics();
            g.fillOval(x, y, XSIZE, YSIZE);
            g.dispose();    
        }
        public void move(double drx,double dry)
        {   
            Graphics g = box.getGraphics();
            g.setXORMode(box.getBackground());
            g.fillOval(x, y, XSIZE, YSIZE);
            x += dx*drx;    y += dy*dry;
            Dimension d = box.getSize();
        if (x < 0){ 
            x = 0; 
            dx = -dx; 
        }
        if (x + XSIZE >= d.width){ 
            x = d.width - XSIZE; 
            dx = -dx; 
        }
        if (y < 0) { 
            y = 0; 
            dy = -dy; 
        }
        if (y + YSIZE >= d.height) { 
            y = d.height - YSIZE; 
            dy = -dy; 
        }
        g.fillOval(x, y, XSIZE, YSIZE);
        g.dispose();    
        }
        public void run()
        {   
            draw();
            for (int i = 1; i <= 1000; i++)
            {   
                move(num1,num2);
                try { Thread.sleep(10); } catch(InterruptedException e) {}
            } 
        }
    }

<>我尝试这个,但是很难创造< /p> 嗯,我不知道你的球的属性是什么,但是如果我们认为你知道球的中心点和半径,你可以很容易地检测到碰撞。 实际上,您只需计算两个中心之间的距离,并检查它是否大于两个半径。如果类中没有必要的属性,则应更新类,使其包含这些信息。 代码为:

//compare the distance to combined radii
if ( Math.sqrt( ( b2.x-b1.x ) * ( b2.x-b1.x )  + ( b2.y-b1.y ) * ( b2.y-b1.y ) ) < ( radius1 + radius2 ) ) 
{
      //Do whatever you want here.
}
//将距离与组合半径进行比较
如果(数学sqrt((b2.x-b1.x)*(b2.x-b1.x)+(b2.y-b1.y)*(b2.y-b1.y))<(半径1+半径2))
{
//在这里你想干什么就干什么。
}

编辑:我同意上面的评论,但是这个类不应该是一个线程。

你能告诉我们你尝试了什么吗?多年前,为了了解碰撞拳击,我发现在一些图表纸上画两个正方形有助于我完成测试。Class
Ball
真的不应该是
线程。
//compare the distance to combined radii
if ( Math.sqrt( ( b2.x-b1.x ) * ( b2.x-b1.x )  + ( b2.y-b1.y ) * ( b2.y-b1.y ) ) < ( radius1 + radius2 ) ) 
{
      //Do whatever you want here.
}