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