2015-11-09 2 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.

В принципе, существуют два разных вида видовых экранов, камера и окно просмотра OpenGL.

FitViewport сохраняет окно просмотра камеры одинаково, но масштабирует окно просмотра OpenGL вверх или вниз. Результатом будет то, что все размеры будут больше или меньше, в зависимости от того, насколько больше или меньше окно просмотра OpenGL, по сравнению с окном просмотра камеры.

ScreenViewport с другой стороны держит видовое окно камеры и окно просмотра OpenGL того же размера, что приведет к тому, что элементы всегда будут иметь одинаковый размер.

Смежные вопросы