Столкновение, если утверждение не работает - PullRequest
0 голосов
/ 20 марта 2012

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

    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);

Программа не доходит до test2!

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

Составная часть краски:

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

Ответы [ 2 ]

1 голос
/ 20 марта 2012

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

0 голосов
/ 20 марта 2012

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

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

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

            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» никогда не печатается.

...