Как правильно справиться с двумерным плиточным столкновением с поддельным движением? - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь реализовать обнаружение столкновений в моей игре Java 2D Tiled. Это моя первая попытка разработки игры, поэтому, пожалуйста, не обращайте внимания на грязный код.

Следующий метод проверяет пользовательский ввод и устанавливает поддельные X и Y, чтобы проверить, приведет ли будущее движение к столкновению (столкновение по оси). Шаги:

  1. Установите для fakeX значение player.x + 1
  2. Проверка столкновения с fakeX
  3. если столкновение ложно с использованием fakeX, обновите player.x, чтобы оно совпадало с fakeX
  4. Если столкновение верно, ничего не делать с 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 () запускается каждый раз.

...