Rectangle.intersects не работает должным образом - PullRequest
0 голосов
/ 10 января 2020

Я делаю игру, которая требует, чтобы я знал, где сталкиваются два объекта. Я решил попробовать Rectangles, потому что недавно узнал о методе Rectangle.intersects (). Поэтому я сделал маленькую сетку прямоугольников размером 2 на 2, которую я наложил на двух игроков в игре, например:

Демонстрация сетки прямоугольников на игроках

Проверка на два Пересечение прямоугольников по таймеру в другом классе, прямоугольники были сделаны в классе для игроков.

Создание прямоугольников

    Rectangle playerHitBoxTL = new Rectangle(0, 0, 60 , 60);
    Rectangle playerHitBoxTR = new Rectangle(60, 0, 59, 60);
    Rectangle playerHitBoxBL = new Rectangle(0, 60, 60, 59);
    Rectangle playerHitBoxBR = new Rectangle(60, 60, 59, 59);

Добавление их в другой класс и проверка, если они collide

    @Override
    public void actionPerformed(ActionEvent arg0) {
        Rectangle playerTL = thePlayer.playerHitBoxTL;
        Rectangle playerTR = thePlayer.playerHitBoxTR;
        Rectangle playerBL = thePlayer.playerHitBoxBL;
        Rectangle playerBR = thePlayer.playerHitBoxBR;
        Rectangle player2TL = testPlayer.playerHitBoxTL;
        Rectangle player2TR = testPlayer.playerHitBoxTR;
        Rectangle player2BL = testPlayer.playerHitBoxBL;
        Rectangle player2BR = testPlayer.playerHitBoxBR;
        if (playerBR.intersects(player2TL)){
           JOptionPane.showMessageDialog(null,"");
        }
    }

Очевидно, что конечная цель увидеть JOptionPane появляется, если нижний правый прямоугольник игрока 1 пересекается с верхним левым прямоугольником игрока два , однако этого никогда не происходит

Таймер был запущен в классе, удерживающем игроков. Надеюсь, у вас, ребята, могут быть какие-либо предложения?

РЕДАКТИРОВАТЬ: Было предложено, чтобы я также поместил код для движения

    @Override
    public void keyPressed(KeyEvent arg0) {
        int code = arg0.getKeyCode(); //gets the int value of the key that was pressed
        if (code == KeyEvent.VK_W) { //If the "w" key is pressed, move everything up
            thePlayer.setLocation(thePlayer.getLocation().x, thePlayer.getLocation().y - 5);
            bullet1.setLocation(bullet1.getLocation().x, bullet1.getLocation().y - 5);        
        }
        if (code == KeyEvent.VK_A) { //if the "a" key is pressed, move everything down
            thePlayer.setLocation(thePlayer.getLocation().x - 5, thePlayer.getLocation().y);
            bullet1.setLocation(bullet1.getLocation().x - 5, bullet1.getLocation().y);
        }
        if (code == KeyEvent.VK_S) { //if the "s" key is pressed move everything to the left
            thePlayer.setLocation(thePlayer.getLocation().x, thePlayer.getLocation().y + 5);
            bullet1.setLocation(bullet1.getLocation().x, bullet1.getLocation().y + 5);
        }
        if (code == KeyEvent.VK_D) { //if the "d" key is pressed move everything to the right
            thePlayer.setLocation(thePlayer.getLocation().x + 5, thePlayer.getLocation().y);
            bullet1.setLocation(bullet1.getLocation().x + 5, bullet1.getLocation().y);
        }
}

РЕДАКТИРОВАТЬ 2: Первоначально выяснил, в чем проблема прямоугольники были нанесены на jpanels с персонажами, а не с рамкой, в которой была вся игра. Сделав новые прямоугольники в классе фрейма, установив их правильное расположение и размеры для символов и заставив их перемещаться вместе с ключевыми слушателями, метод intersects начал работать так, как я хотел после этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...