2012-03-19 2 views
-2

В принципе, я просто опробовал очень простой тест на столкновение для другой программы, над которой я работаю, но это кажется таким простым (или, может быть, я просто идиот!) В любом случае, вот код :Столкновение, если утверждение, похоже, не работает

public void run() { 
    while(true){ 

     try { 
      if(rect.rect.intersects(rect1.rect)){ 
       System.out.println("Test1"); 
       if(rect1.x == ((rect.x + rect.width)-1)){ 
        System.out.println("Test2"); 
       rect1.x = rect.x + rect.width; 
       rect1.dx = 0; 

       } 
      } 

      rect.update(); 
      rect1.update(); 

      Thread.sleep(50); 

Программа не может пройти тест2!

Любая помощь для решения этой проблемы очень ценится! Заранее спасибо!

компонент краски часть:

public void paintComponent(Graphics g){ 
    rect1.paint(g); 
    rect2.paint(g); 
    g.drawString(String.valueOf(rect1.x), 100, 100); 
    g.drawString(String.valueOf(rect2.x+rect2.width), 100, 150); 
    repaint(); 
} 

Изображение:

test

+4

Ну, возможно, 'rect.rect' не пересекает' rect1.rect' ... отредактируйте это в короткой, но * полной * программе, которая демонстрирует проблему ... –

+1

Есть ли у вас какие-либо основания предполагать, что выражение во втором, если верно? – VeeArr

+2

Это поможет, если вы объясните, что означает этот тест. – Robinson

ответ

1

Запустить программу в Eclipse (или ваш любимый IDE) и использовать его отладкой во время выполнения, чтобы установить точку останова на первой если утверждение. Затем перейдите и просмотрите значения переменных. Надеюсь, это позволит понять, почему ваш код не выполняет то, что вы ожидаете.

+0

Это помогло много, Ive на самом деле не использовал контрольные точки раньше, но теперь я знаю, для чего они нужны, спасибо за помощь! – hazard1994

+0

Нет проблем. Отладка с помощью println - это боль. Вы также можете установить условия на контрольных точках. Они очень сильны. Повеселись! –

0

Как насчет построения этого метода только для отладки удобства (если у вас есть отладчик):

public static printRectProperties(Rectangle rect, String rectangleName){ 
    System.out.println(rectangleName + ": x = " + rect.x + ", y = " 
     + rect.y + ", width = " rect.width + ", height = " + rect.height; 
} 

Тогда вы можете просто вызвать этот метод для регистрации статистики о прямоугольниках до исполнения, если заявление:

  if(rect.rect.intersects(rect1.rect)){ 
       System.out.println("Test1"); 
        printRectProperties(rect, "rect"); 
        printRectProperties(rect1, "rect1"); 
       if(rect1.x == ((rect.x + rect.width)-1)){ 
        System.out.println("Test2"); 

Это должно легко понять, почему «Test2» никогда не печатается.

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