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;
}