2014-01-25 6 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를 무시하십시오.

편집 나는 그 말을 바꾸어야한다고 생각합니다. 나는 그것을 멈출 수있는 방법을 안다. 그것은 내 코드를 사용하여 작동하지만, 멈출 위치를 결정하는 방법을 알 수 없다. 위의 코드에서 15를 사용하고 있는데, 절반은지도입니다. 물론 작동하지 않습니다.

답변

2

편집 나는 그것을 바꾸어야한다고 생각합니다. 나는 그것을 멈추게하는 법을 안다. 그것은 이 내 코드를 사용하여 작동하지만, 어디서 멈추는 지 결정할 방법을 알아 내지 못한다. . 위의 코드에서 15를 사용하고 있습니다. 어느 것이지도의 절반입니까 ... 어느 것입니까 물론 작동하지 않습니다.

최소 X 될 필요가있을 것이다 : 할 필요가

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

그리고 최대 X을 :

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