如何在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.
}