Мой код, который заставляет меня прыгать в мой платформер, также нарушает мой код столкновения - PullRequest
0 голосов
/ 28 марта 2019

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

Соответствующий код изосновной класс

public void collision() {
    Rectangle body = jan.getBody();
    int bodyX = (int) body.getX();
    int bodyY = (int) body.getY();
    if (bodyX < 0) {
            body.setLocation(0, bodyY);
            jan.setBody(body);
    }
    if (bodyX > 780) {
            body.setLocation(780, bodyY);
            jan.setBody(body);
    }
    if (bodyY > 360) {
            body.setLocation(bodyX, 360);
            jan.setBody(body);
    }
}
public void actionPerformed(ActionEvent e) {
    jan.update();
    collision();
    repaint();
}
public void keyPressed(KeyEvent e) {
    int keyCode = e.getKeyCode();
    if (keyCode == KeyEvent.VK_LEFT) {
        jan.setDirection(-1);
    } else if (keyCode == KeyEvent.VK_RIGHT) {
        jan.setDirection(1);
    } else if (keyCode == KeyEvent.VK_SPACE) {
        jan.jump();
    }
}

Соответствующий код из класса игрока

public void jump() {
    int y = (int) body.getY();
    if (y == 360) {
        body.translate(0, -15);
        yVelocity = 15;
    }
}
public void update() {
    int x = getDirection();
    if (x == 1) {
        if (xVelocity < terminalVelocity) {
            xVelocity++;
        }
    }
    if (x == -1) {
        if (xVelocity > -terminalVelocity) {
            xVelocity--;
        }
    }
    if (x == 0) {
        if (xVelocity < 0) {
            xVelocity++;
        } else if (xVelocity > 0) {
            xVelocity--;
        }
    }
    if (body.y < 360) {
        yVelocity--;
    }
    body.translate(xVelocity, -yVelocity);
    }

Какие-либо причины, по которым мой код ломается после прыжка моего персонажа?

1 Ответ

0 голосов
/ 28 марта 2019

Логика collision отменяет зажим в X, если Y также выходит за пределы.Попробуйте сжать и x, и y, а затем обновите тело, если есть изменения:

  public void collision() {
    Rectangle body = jan.getBody();
    int bodyX = (int) body.getX();
    int bodyY = (int) body.getY();
    int clampedBodyX = Math.min(Math.max(0, bodyX), 780);
    int clampedBodyY = Math.min(Math.max(0, bodyY), 360);
    if (bodyX != clampedBodyX || bodyY != clampedBodyY) {
      body.setLocation(clampedBodyX, clampedBodyY);
      jan.setBody(body);
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...