Я пытался сделать пересечение игроков небольшим проектом, который я делаю, и я не могу заставить его работать. Я получил Пересечение, чтобы работать с игроком и стеной, но это очень багги, багги, я имею в виду, он рисует игрока в стене, а затем мгновенно возвращает его обратно. (Проверьте Gyazo за gif этого). Я почти уверен, что проблема в том, что он проверяет только, находится ли игрок в стене, а не будет в стене, но я не могу понять, как это проверить. Это то, что я до сих пор:проверка, если 2 прямоугольника WILL перекрываются
public void intersectsBox2(Rectangle r, Rectangle r2) {
P1 = new Point((int) r.getMinX(), (int) r.getMinY());
P2 = new Point((int) r.getMaxX(), (int) r.getMaxY());
P3 = new Point((int) r2.getMinX(), (int) r2.getMinY());
P4 = new Point((int) r2.getMaxX(), (int) r2.getMaxY());
if ((P2.y < P3.y || P1.y > P4.y || P2.x < P3.x || P1.x > P4.x)
&& !intersectsBox(playerRectangle(), noWalls[0])) {
isInsideWalls = true;
}
}
// Gets the players rectangle
public Rectangle playerRectangle() {
return new Rectangle(9 + dx, 23 + dy, 54, 90);
}
Это сделать игрока Move:
public void playerMovement() {
if (isInsideWalls) {
System.out.println("YOU ARE IN THE BOX!");
if (animation == down) {
dy -= moveSpeed;
isInsideWalls = false;
} else if (animation == up) {
dy += moveSpeed;
isInsideWalls = false;
} else if (animation == left) {
dx += moveSpeed;
isInsideWalls = false;
} else if (animation == right) {
dx -= moveSpeed;
isInsideWalls = false;
}
} else {
// Moves the player
if (moving == downMove) {
dy += moveSpeed;
moving = 0;
} else if (moving == upMove) {
dy -= moveSpeed;
moving = 0;
} else if (moving == leftMove) {
dx -= moveSpeed;
moving = 0;
} else if (moving == rightMove) {
dx += moveSpeed;
moving = 0;
}
}
Это проверить для пересечения:
//Checks for intersection
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
intersectsBox2(walls[i][j], playerRectangle());
}
}
Не совсем уверен, если это необходимо, но нужно полное Game.java, если вам нужно это увидеть: http://pastebin.com/GrDy689d
Также здесь Gif проблемы: http://i.gyazo.com/1f31f739897af78f81e61cf22ac772db.mp4
P.S: Это специально я могу только перейти в 1 коробку на данный момент для целей тестирования.
Просто общие комментарии - почему бы не вызвать 'intersectsBox2' прямо перед проверкой' if (isInsideWalls) ', вместо того, чтобы ждать следующего вызова' playerMovement'? И 'dy' и' dx' обычно относятся к * изменению * по y и x, а не к * значению * y и x. – gengkev