如何检测JAVA中的collison?

时间:2015-05-29 08:15:14

标签: java

我只想在球碰到时将球打成两块 这是我的Ball Thread代码然后,

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) {}
            } 
        }
    }

然后如何检测collsion?

public boolean crashCheck(Ball b1,Ball b2)

我试试这个,但很难创造

1 个答案:

答案 0 :(得分:0)

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

//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.
}

编辑:我同意上述评论,但这个课程不应该是一个主题。