2015-11-09 74 views
1

我正在創建一個遊戲,我不希望我的屏幕在我調整窗口大小時被拉伸(當然只有當它適合窗口時)。我使用Stage對象與FitViewport,但是當我調整窗口大小時,它上面的元素也正在調整大小。我究竟做錯了什麼?libGDX - FitViewport正在拉伸舞臺

這是我的屏幕類:

public class SplashScreen implements Screen{ 

    private final PuzzleGame app; 
    private Stage stage; 

    private Image splashImage; 

    public SplashScreen(final PuzzleGame app) { 
     this.app = app; 
     this.stage = new Stage(new FitViewport(PuzzleGame.V_WIDTH, PuzzleGame.V_HEIGHT, app.camera)); 
     Gdx.input.setInputProcessor(stage); 

     Texture splashTex = new Texture(Gdx.files.internal("img/splash.png")); 
     splashImage = new Image(splashTex); 
     splashImage.setPosition(stage.getWidth()/2, stage.getHeight()/2); 

     stage.addActor(splashImage); 
    } 

    @Override 
    public void show() { 
    } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(.25f, .25f, .25f, 1f); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     update(delta); 

     stage.draw(); 
    } 

    private void update(float delta) { 
     stage.act(delta); 
    } 

    @Override 
    public void resize(int width, int height) { 
     stage.getViewport().update(width, height, false); 
    } 

    @Override 
    public void pause() { 
    } 

    @Override 
    public void resume() { 
    } 

    @Override 
    public void hide() { 
    } 

    @Override 
    public void dispose() { 
     stage.dispose(); 
    } 
} 
+2

不調整調整大小階段的唯一Viewport類是ScreenViewport。其餘的應該縮放它,以便您的虛擬分辨率始終匹配窗口大小。 – Tenfour04

回答

3

正如Tenfour04已經指出的那樣,你正在尋找ScreenViewport

您可能想查看this question,然後重新閱讀Viewports wiki article

基本上,有兩種不同類型的視口,Camera和OpenGL視口。

FitViewport保持相機視口相同,但向上或向下縮放OpenGL視口。結果將是所有尺寸都會變得更大或更小,這取決於OpenGL視口與相機視口相比的大小。

ScreenViewport另一方面保持相機視口和OpenGL視口的大小相同,這將導致元素始終具有相同的大小。