2014-01-25 7 views
2

Я довольно новичок в libgdx и java, но изучаю все, что могу! Я работаю над ортогональной игрой в 2d. В принципе, у меня есть мой персонаж, который идет, и камера следит за ним. Я пытаюсь настроить его, чтобы камера остановилась, когда персонаж находится рядом с краем карты, поэтому черное пространство не видно. Камера должна остановиться на краю, и игрок должен продолжить движение.LibGDX - Ортогональная камера не остановится на краю карты

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

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.

EDIT Думаю, мне нужно изменить это. Я знаю, как остановить его. Он работает с моим кодом, но я не могу понять, как определить, где его остановить. Я использую 15 в моем коде выше, что составляет половину карты. Это, конечно, не работает.

ответ

2

EDIT Я считаю, что мне нужно изменить это. Я знаю, как заставить его остановиться. Это работает с моим кодом, но я не могу понять, как определить, где остановить его. Я использую 15 в моем коде выше, который составляет половину карты .., из которой курс не работает.

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

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

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

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

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

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^