2015-01-31 5 views
0

저는 Screen을 사용하고 있습니다.libgdx에서 뷰포트를 사용하는 스테이지의 표 요소는 센터 대신 기본값의 오른쪽 상단에 표시됩니다.

StageTable 클래스를 사용하면 화면 왼쪽 상단에 Table을 표시하고 싶지만 기본값은 내 화면 오른쪽 상단에 표시됩니다.

tableLeft.left()을 호출하면 테이블이 화면의 상단 중앙으로 이동합니다. tableLeft.top()을 사용하면 화면 밖으로 tabe가 이동합니다. 뷰포트를 사용하지 않는 경우 완벽하게 작동하지만 다른 문제가 발생합니다.

약 2 주 동안 카메라와 관측점에 대해 지금 읽고 있으며, 위키에있는 공식 libgdx 자습서와 같이 읽은 후에도 어떻게 작동하는지는 여전히 혼란 스럽습니다. 나는 그것을 할 수 있었다. 예를 들어, resize() 메서드에서 모든 것을 제거 할 수 있고 출력이 전혀 변경되지 않는 이유가 전혀 없습니다.

내 코드는 다음과 같습니다

@Override 
public void show() { 
    .... 
    camera = new OrthographicCamera(1920, 1080); 
    viewport = new FitViewport(1920, 1080, camera); 
    viewport.apply(); 
    .... 
    batch = new SpriteBatch(); 
    .... 
    stage = new Stage(viewport, batch); 

    Table tableLeft = new Table(); 
    tableLeft.add(new Label("Dummy Label", skin, "default")); 
    stage.addActor(tableLeft); 
    ..... 
} 

    @Override 
    public void resize(int width, int height) { 
     viewport.update(width, height, true); 
     stage.getViewport().update(width, height, true); 
     camera.position.set(camera.viewportWidth/2, camera.viewportHeight/2, 0); 
    } 

답변

1

당신 업데이트 뷰포트도 중앙 카메라를 수동으로 실시하지 않아도 같아요

viewport.update(width, height, true); 
camera.position.set(camera.viewportWidth/2, camera.viewportHeight/2, 0); 

이미 수행

stage.getViewport().update(width, height, true); 

때문에를 귀하의 경우 :

/** Configures this viewport's screen bounds using the specified screen size and calls {@link #apply(boolean)}. Typically called 
* from {@link ApplicationListener#resize(int, int)} or {@link Screen#resize(int, int)}. 
* <p> 
* The default implementation only calls {@link #apply(boolean)}. */ 
public void update (int screenWidth, int screenHeight, boolean centerCamera) { 
    apply(centerCamera); 
} 

/** Applies the viewport to the camera and sets the glViewport. 
* @param centerCamera If true, the camera position is set to the center of the world. */ 
public void apply (boolean centerCamera) { 
    Gdx.gl.glViewport(screenX, screenY, screenWidth, screenHeight); 
    camera.viewportWidth = worldWidth; 
    camera.viewportHeight = worldHeight; 
    if (centerCamera) camera.position.set(worldWidth/2, worldHeight/2, 0); 
    camera.update(); 
}