LibGDX - Ортогональная камера не остановится на краю карты

Я довольно новичок в libgdx и java, но учусь всему, что могу! Я работаю над ортогональной двумерной мозаичной игрой. По сути, мой персонаж ходит и камера следует за ним. Я пытаюсь настроить его таким образом, чтобы камера остановилась, когда персонаж приблизился к краю карты, чтобы не было видно черного пространства. Камера должна остановиться на краю, и игрок должен продолжать двигаться.

Это мой код для перемещения камеры. Сейчас немного грязно, потому что я все пробовал. Карта 30х30.

if (mainPlayer.getPosition().x >= 15 && mainPlayer.getPosition().x <= 30) {
    camera.position.x = mainPlayer.getPosition().x;     
}

camera.position.y = mainPlayer.getPosition().y;

camera.update();
camera.apply(gl);

Это внутри моего метода рендеринга. Я только испортил часть x, так что пока игнорируйте y.

РЕДАКТИРОВАТЬ Я думаю, что мне нужно перефразировать это. Я знаю, как это остановить... Это работает с использованием моего кода, но я не могу понять, как определить, где его остановить. Я использую 15 в моем коде выше, что составляет половину карты.. что, конечно, не работает.

2 ответа

РЕДАКТИРОВАТЬ Я думаю, что мне нужно перефразировать это. Я знаю, как это остановить... Это работает с использованием моего кода, но я не могу понять, как определить, где его остановить. Я использую 15 в моем коде выше, что составляет половину карты.. что, конечно, не работает.

Минимальный х должен быть:

map.position.x + camera.viewportWidth/2;

И максимальный х должен быть:

map.position.x+mapwidth-camera.viewportWidth/2;

Предполагая, что положение карты в (0,0), вы можете просто игнорировать map.position.x часть.

Вам необходимо зафиксировать границы прямоугольника камеры внутри прямоугольника мира. Такая функция, как показано ниже, поможет:

public void fixBounds() {
    float scaledViewportWidthHalfExtent = viewportWidth * zoom * 0.5f;
    float scaledViewportHeightHalfExtent = viewportHeight * zoom * 0.5f;

    // Horizontal
    if (position.x < scaledViewportWidthHalfExtent)
        position.x = scaledViewportWidthHalfExtent;
    else if (position.x > xmax - scaledViewportWidthHalfExtent)
        position.x = xmax - scaledViewportWidthHalfExtent;

    // Vertical
    if (position.y < scaledViewportHeightHalfExtent)
        position.y = scaledViewportHeightHalfExtent;
    else if (position.y > ymax - scaledViewportHeightHalfExtent)
        position.y = ymax - scaledViewportHeightHalfExtent;
}
Другие вопросы по тегам