我只想在球碰到时将球打成两块 这是我的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)
我试试这个,但很难创造
答案 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.
}
编辑:我同意上述评论,但这个课程不应该是一个主题。