2014-06-15 3 views
2

조직을 위해 필자는 게임에 여러 장면을 사용하고 각 장면에 뷰포트를 수신하는 생성자 (내 게임은 확장 가능)가있는 대신, 각 스테이지의 뷰포트를 생성자와 별도로 설정하려면 뷰포트를 설정 한 후 액터를 추가하십시오. 메인 클래스에서,이 같은 일이 일어날 :LibGDX - Stage.setViewport (새로운 뷰포트()) 검은 색 화면

public void setStage(Stage s) 
{ 
    if(currentStage != null) 
     currentStage.dispose(); 
    currentStage = s; 
    currentStage.setViewport(view); 
} 

이 유동적으로 갈 수 있도록하기 위해, 각 단계는 오버라이드 (override) setViewport 내에서 호출되는 init 메소드가 있습니다 그러나

@Override 
public void setViewport(Viewport v) 
{ 
    super.setViewport(v); 
    init(); 
} 

을,이 모든 것이 제공 나 검은 스크린입니다 ... 나는 카메라와 뷰포트를 업데이트하려고 시도했지만 아무런 도움이되지 않습니다 (액터가 호출되는 렌더링 메서드를 가지고 있음에 유의하십시오).

왜이 검은 색 화면이 나타나고 어떻게 수정합니까? 가능하지 않다면 생성자를 사용하는 것으로 되돌아갑니다.

답변

2
@Override 
    public void setViewport(Viewport v) 
    { 
     super.setViewport(v); 

     this.getViewport().update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false); 

     Camera c = this.getViewport().getCamera(); 
     c.position.set(c.viewportWidth/2, c.viewportHeight/2, 0); 

     init(); 
    } 

이 방법이 유용하지만 동일한 응용 프로그램을 계속 사용하는 경우 응용 프로그램 시작시 뷰포트를 업데이트 할 수 있어야합니다. 내 스테이지 중 일부가 화면보다 커지기 때문에 센터링 대신 위의 위치를 ​​설정합니다.

Stage stage1 = new Stage(); 
stage1.getViewport().update(width, height); 

을 오히려 이것보다 :하십시오 ScalingViewport이 자동으로 costructed됩니다 (당신이 일을하려고하는) 첫 번째 경우에

Stage stage1 = new Stage (new StretchViewport(width, height)); // It doesn't have to be StretchViewport 

3

나는이 작업을 수행하려면 제대로 이해하는 경우 Gdx.graphics 및 정사영 카메라의 크기 및 StretchViewport와 같은 역할을합니다. 두 번째 케이스를 원하는 뷰포트를 통과하는 곳에 직접 두지 마십시오. 언제든지 언제든지 뷰포트를 변경할 수 있습니다. stage1.getViewport().update(width, height);

또는 stage1.setViewport(width, height, false);을 이전 Libgdx 버전으로 호출하여 변경할 수 있습니다.

뷰포트는 어쩌면 당신은 당신이 원하는 것을 달성 할 수있는 업데이트 방법을 재정의 뷰포트 클래스를 확장 할 수 있습니다, 그래서 만약 최근에 변경되었습니다

public class ViewportExtendClass extends StretchViewport{ 

public ViewportExtendClass(float worldWidth, float worldHeight) { 
    super(worldWidth, worldHeight); 
} 

@Override 
public void update (int screenWidth, int screenHeight, boolean centerCamera) { 
    super.update(screenWidth, screenHeight, centerCamera); 
    // DO YOUR INITIALIZATION HERE 
} 

} 메인 클래스에서

당신이 새로운 단계를 만듭니다

Stage stage1 = new Stage (new ViewportExtendClass (width, height)); 

그리고 당신은 전화 :

stage1.getViewport().update(width, height); 

이와 같이 무대 뷰포트를 변경하고 애셋을 다시 초기화 할 수 있습니다.

+0

내 무대에서 setViewport 메소드를 무효화했다는 것을 제외하고는 내가 한 일은 다소 많습니다 (무대에서 확장 한 클래스에서 한 번 수행 한 다음 모든 상태에서 해당 클래스를 확장했습니다). 고유 한 뷰포트를 만들면 업데이트를 한 번만 호출하면됩니다. – StrongJoshua