2017-11-24 6 views
1

저는 LibGDX로 등각 투상 게임을 만들고 있습니다. 팬 한도를 알아 내려고 노력 중이므로 사용자가 화면의 등각 투영 맵에서 벗어날 수 없습니다. 한계는 확대/축소에 따라 달라질 필요가 있습니다. 수직의 등각 투구 한계가 작동하지 않습니다.

나는 팬 제한을위한 직교 하향식 게임에 다음 코드를 발견

float pxWidth =((TiledMapTileLayer) tiledMap.getLayers().get("Background")).getWidth() * ((TiledMapTileLayer) tiledMap.getLayers().get("Background")).getTileWidth(); 
    float pxHeight = ((TiledMapTileLayer) tiledMap.getLayers().get("Background")).getHeight() * ((TiledMapTileLayer) tiledMap.getLayers().get("Background")).getTileHeight(); 

    float scaledViewportWidthHalfExtent = cam.viewportWidth * cam.zoom * 0.5f; 
    float scaledViewportHeightHalfExtent = cam.viewportHeight * cam.zoom * 0.5f; 

    float xmax = pxWidth; 
    float ymax = pxHeight; 

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

    // Vertical 
    if (cam.position.y < scaledViewportHeightHalfExtent) { 
     cam.position.y = scaledViewportHeightHalfExtent; 
    } 
    else if (cam.position.y > ymax - scaledViewportHeightHalfExtent) 
     cam.position.y = ymax - scaledViewportHeightHalfExtent; 

    cam.update(); 

이 아닌 수직 방향, 수평 방향에 대해 완벽하게 작동합니다. 수직 방향은 맵 크기의 절반만큼 오프셋 된 것처럼 보입니다.

enter image description here

가 어떻게 등각 수직 제한에 직교 수직 한계를 변환합니까 : 여기에 문제를 설명 GIF 파일이다?

또한 카메라의 y = 0 위치가 화면 중앙에있는 것처럼 보입니다.

다른 가능한 중요한 정보 :

  • 타일 등,
  • 타일
  • OrthographicCamera 패닝에 사용되는 픽셀을 선별하도록 설정 뷰포트 사용할 IsometricTiledMapRenderer
  • ExtendViewport를 사용하여 렌더링 512 X 256 픽셀이다 확대 .

답변

1

y 제한의 문제는 y = 0이 화면. 즉, 수직지도 모서리는 0ymax이 아니지만 -ymax/2ymax/2입니다. 따라서 최종 코드는 다음과 같습니다.

if (cam.position.y < -ymax + scaledViewportHeightHalfExtent) cam.position.y = -ymax + scaledViewportHeightHalfExtent; 
else if (cam.position.y > ymax - scaledViewportHeightHalfExtent) cam.position.y = ymax - scaledViewportHeightHalfExtent;