2015-09-26 3 views
0

У меня есть настройка окна просмотра и камеры, но всякий раз, когда я визуализую, видовой экран действует как StretchViewport и заполняет весь мой экран, вместо того, чтобы сохранить соотношение сторон и добавлять черные полосы. Кто-нибудь знает, что я делаю неправильно или как это исправить?Каждый видоискатель действует как stretchviewport

Я получил этот код в моем классе GameScreen для настройки камеры и видового экрана:

private static final int VIRTUAL_WIDTH = 468; 
private static final int VIRTUAL_HEIGHT = 293; 

private OrthographicCamera camera; 
private FitViewport viewport; 

@Override 
public void show() { 
    camera = new OrthographicCamera(); 
    viewport = new FitViewport(VIRTUAL_WIDTH,VIRTUAL_HEIGHT,camera); 
    viewport.apply(); 

    camera.position.set(camera.viewportWidth/2,camera.viewportHeight/2,0); 
} 

@Override 
public void render(float delta) { 
    camera.update(); 

    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    // do drawing 
    batch.end(); 
} 

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

Полный код:

package com.Sidescroll.game; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.Screen; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.OrthographicCamera; 
import com.badlogic.gdx.graphics.g2d.BitmapFont; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.utils.viewport.FitViewport; 

public class GameScreen implements Screen { 

    private static final int VIRTUAL_WIDTH = 468; 
    private static final int VIRTUAL_HEIGHT = 293; 

    private SpriteBatch batch; 
    private BitmapFont font; 

    private OrthographicCamera camera; 
    private FitViewport viewport; 
    private int deltaCount; 
    private float deltaSum; 
    private float fps; 

    private Level level; 
    private Player player; 

    @Override 
    public void show() { 
     level = new Level(); 
     player = new Player(level.getSpawn()); 
     batch = new SpriteBatch(); 
     font = new BitmapFont(); 
     camera = new OrthographicCamera(); 
     viewport = new FitViewport(VIRTUAL_WIDTH,VIRTUAL_HEIGHT,camera); 
     viewport.apply(); 
     System.out.println(camera.viewportWidth); 
     camera.position.set(camera.viewportWidth/2,camera.viewportHeight/2,0); 
    } 

    @Override 
    public void render(float delta) { 
     camera.update(); 

     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     player.update(delta); 

     deltaCount += 1; 
     deltaSum += delta; 

     if(deltaSum >= 1) { 
      fps = 1/(deltaSum/deltaCount); 

      deltaCount = 0; 
      deltaSum = 0; 
     } 

     batch.setProjectionMatrix(camera.combined); 
     batch.begin(); 
     level.draw(batch, player); 
     font.draw(batch, "FPS: " + fps, 0, 293); 
     batch.end(); 
    } 

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

    @Override 
    public void pause() {} 

    @Override 
    public void resume() {} 

    @Override 
    public void hide() {} 

    @Override 
    public void dispose() { 
     font.dispose(); 
     batch.dispose(); 
     level.dispose(); 
    } 

} 
+0

проверил ваш код, и он ведет себя как FitViewport, а не заполняет :) вы уверены, что он не работает нормально? Я добавил одну текстуру для рендеринга - все остальное было скопировано в конец –

+0

Код также выглядит отлично. Должен работать как намеренный. – noone

+0

Хорошо, я добавил полный код, это помогает? его немного изменилось/добавлено – zebleckDAMM

ответ

0

Забыла также вызвать изменение размеров в классе, простирающейся игры

@Override 
public void resize(int width, int height) { 
    super.resize(width, height); 
} 
Смежные вопросы