Я пытаюсь реализовать обнаружение столкновений в моей игре Java 2D Tiled. Это моя первая попытка разработки игры, поэтому, пожалуйста, не обращайте внимания на грязный код.
Следующий метод проверяет пользовательский ввод и устанавливает поддельные X и Y, чтобы проверить, приведет ли будущее движение к столкновению (столкновение по оси). Шаги:
- Установите для fakeX значение player.x + 1
- Проверка столкновения с fakeX
- если столкновение ложно с использованием fakeX, обновите player.x, чтобы оно совпадало с fakeX
- Если столкновение верно, ничего не делать с player.x и вернуть fakeX на player.x
Дело в том, что когда я пытаюсь увеличить «скорость», изменяя + 1 на + 2, это ведет себя довольно странно, оставляя зазор между игроком и стеной. Это, вероятно, "очень быстро приходит в норму". Этот зазор делает невозможным размещение в отверстии сверху.
Есть мысли по этому поводу? Может быть, вещи в неправильном порядке? Я что-то упустил?
разрыв
код для движения вправо:
public void checkInput() {
if (player.moveRight) {
player.fakeX = player.x + 2;
player.getCollisionBox().setLocation(player.fakeX, player.y);
checkCollisionWhenMoving();
if (!player.willCollide) {
player.x = player.fakeX;
} else {
player.fakeX = player.x;
player.willCollide = false;
}
player.getCollisionBox().setLocation(player.x, player.y);
}
}
checkCollisionWhenMoving () использует окно столкновения игрока, чтобы проверить наличие столкновений. Сам код для обнаружения столкновений работает очень хорошо. метод checkInput () запускается каждый раз.