Вот мой код, когда мой игрок пересекает GRect, но он работает только для 2 сторон прямоугольника. Другие 2 дают нежелательный эффект.
private void gameLoop() {
boolean done = false;
while (!done) {
if (pan.getBounds().intersects(b.getBounds())) {
pan.move(-10, -10);
}
Как я могу заставить моего игрока "видеть" прямоугольник как препятствие и сталкиваться с ним?
Я использую ключевые слушатели, чтобы переместить игрока.
EDIT
Я добавил следующие операторы if для проверки взаимодействия игрока с каждой стороной препятствия, но опять-таки, похоже, он работает для левой и нижней сторон. Мне нужно все четыре стороны .
Я использую pan.move
, потому что это то, что я использую для перемещения игрока в первую очередь, когда нажата клавиша. Так, например, когда я нажимаю влево, я использую pan.move(-10,0)
и поэтому, чтобы игрок не двигался влево, я использую pan.move(10,0)
if (pan.getBounds().intersects(b1.getBounds())) {
if ((pan.getX() +PAN_WIDTH ) > b1.getX()) { // left
pan.move(-10, 0);
}
if ((pan.getY() PAN_WIDTH ) > b1.getY()) { //top
pan.move(0, -10);
}
if ((pan.getY()) < b1.getY() + OBSTACLE_WIDTH) { // bottom
pan.move(0, 10);
}
if ((pan.getX() PAN_WIDTH) < b1.getX() + OBSTACLE_HEIGHT) { // right
pan.move(10, 0);
}
}