Мой детектор столкновений пропускает мой спрайт через некоторые стены и сталкивается с другими, и я не знаю почему - PullRequest
0 голосов
/ 16 января 2019

Я делаю Zelda / Pokemon-esque игру в LIGBDX и пытаюсь выяснить обнаружение столкновений. Я использую Tiled Maps и у меня есть Wall Layer, который я использую для столкновения. Всякий раз, когда игрок пытается двигаться, я использую цикл for, который проверяет, столкнется ли он со стеной. По какой-то причине игрок может остановиться на одних стенах совершенно нормально, но может пробиться сквозь другие.

Движение игрока

public void MoveLeft() {


        for (float i = 0; i < movespeed; i++) {

            if (!M.iswallat(getPosition().getX() - 1, getPosition().getY()) ) {
                getPosition().moveLeft(1, M);
                UpdatePos();
            } else {
                break;
            }
        }
    }

На самом деле есть 4 метода для каждого типа движения (влево, вправо, вверх и вниз). Все они функционально одинаковы, с той лишь разницей, что переменная изменяется. getPosition - это место, где хранятся данные позиции. UpdatePos перемещает Sprite и обновляет камеру. Сам MoveLeft вызывается таймером всякий раз, когда активен логический IsMovingLeft. Это логическое значение включается и выключается методами KeyDown и KeyUp в InputProcessor.

Стена в

public boolean iswallat(float x, float y) {

        int xr =  (int) (x / collisionLayer.getTileWidth());
        int yr =  (int) ( y / collisionLayer.getTileHeight());
        if (collisionLayer.getCell(xr, yr) != null) {

            System.out.println("Cell found at : "+ xr + "," + yr);


            if (collisionLayer.getCell(xr, yr).getTile().getProperties().containsKey("blocked")) {


                return true;
            }

            else {
                System.out.println("Found but not blocked!");
                return false;
            }

        }

        else {

            return false;
        }
    }

Я ожидаю, что игрок действительно столкнется и остановится у стен, а не пробьется.

...