Fitviewport无法正常工作

时间:2014-12-12 14:01:44

标签: java libgdx viewport scaling scene2d

当我使用正确的宽高比开始我的游戏时,当我调整窗口大小时,我的游戏非常适合所有比例,但是当我使用不同的宽高比开始我的应用时,事情就出错了。

我在主游戏类中设置了这些全局变量:

public static final int VirtualWidth = 720;
public static final int VirtualHeight = 1280;

在屏幕课上我使用了fitviewport。

private Stage gameStage;
private OrthographicCamera camera;
private SpriteBatch batch;

private Viewport vp = new FitViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

public GameScreen()
{
    batch = new SpriteBatch();
    camera = new OrthographicCamera(ShufflePuzzle.VirtualWidth, ShufflePuzzle.VirtualHeight);
    camera.setToOrtho(false, ShufflePuzzle.VirtualWidth, ShufflePuzzle.VirtualHeight);

    FitViewport vp = new FitViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), camera);
    vp.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    gameStage = new Stage(vp, batch);

    Gdx.input.setInputProcessor(gameStage);
}

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

    gameStage.act();
    gameStage.draw();

}

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

据我所知,我必须将相机设置为屏幕的实际大小,并将视口设置为我的虚拟值。我确实尝试用完全相同的结果切换它。这是我的桌面配置:

    //The size i made my game for, here everything works like a charm.
    // If i resize my viewport manually to 1024x768 the screen gets fitted like it should.
    config.width=720 / 2;
    config.height=1280 / 2;

    //When I use below config my stage will not fit the screen.
    config.width = 1024 * 2;
    config.height = 768 * 2;

1 个答案:

答案 0 :(得分:1)

在实例化视口而不是相机时,需要使用虚拟尺寸。无论如何,视口将忽略并覆盖相机值。

这样做:

camera = new OrthographicCamera();
FitViewport vp = 
    new FitViewport(ShufflePuzzle.VirtualWidth, ShufflePuzzle.VirtualHeight, camera);

此外,您的构造函数vp引用隐藏了成员vp,因此不清楚哪个是哪个。我无法想到你需要两个具有相同参数的独立视口的原因。但是如果你这样做,那个作为成员变量的那个也应该用虚拟大小来实例化,而不是窗口的实际大小(如果你在这个类之外实例化它,那么在实例化时它可能会为零)' s构造函数)。