2015-05-29 4 views
-1

Я просто хочу, чтобы сделать шар перерыв на две части, когда шары встретиться это мой Болл код резьбы, а затем,Как обнаружить конфликт в 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.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

Можете ли вы показать нам, что вы пробовали? Несколько лет назад я нашел, что рисование двух квадратов на какой-либо графической бумаге помогло мне пройти тест. – pete23

+1

Класс 'Ball' действительно не должен быть' Thread'. – Fildor

ответ

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

EDIT: Я согласен с комментариями выше, этот класс не должен быть нить, хотя.

Смежные вопросы