【问题标题】:Libgdx Switching Screens and ViewportsLibgdx 切换屏幕和视口
【发布时间】:2016-03-24 16:25:04
【问题描述】:

我在 libgdx 中切换屏幕时遇到问题。我正在构建一个小行星游戏克隆。所以首先我的 MainMenuScreen 类(它使用 Fitviewport)被渲染,然后我调用 setScreen() 到 GameScreen(GameScreen 不使用 Fitviewport),除了第二个屏幕呈现好像它使用 Fitviewport 之外,它可以工作。如果我调整第二个屏幕的大小,则整个窗口都用于渲染。为什么会这样?以下是一些图片:

MainMenuScreen 类:

GameScreen 类切换屏幕后,屏幕侧面有黑条(我为您将边界涂成红色),这是我不想要的:

我希望 GameScreen 使用所有窗口区域进行渲染,而不是像 MainMenu 那样有黑条。我也没有在 GameScreen 中使用任何 Fitviewport。

这是我的 MainMenuScreen 类的相关部分:

public class MainMenuScreen implements Screen
{
    private static final String TAG = "MainMenu";
    private static final int VIRTUAL_WIDTH = 400;
    private static final int VIRTUAL_HEIGHT = 400;
    MyGdxGame game;

       ...

    public MainMenuScreen(MyGdxGame game)
    {

        this.game = game;
        viewport = new FitViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT);
        stage = new Stage(viewport);

        // Play button listener
        btnPlay.addListener( new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                Gdx.app.log(TAG, "PLAY");
              MainMenuScreen.this.game.setScreen(MainMenuScreen.this.game.gameScreen);
            };
        });

             ....
    }

这是我的 GameScreen 类:

MyGdxGame game;
OrthographicCamera guiCam;
World world;
WorldRenderer renderer;


public GameScreen(MyGdxGame game, SpriteBatch batch)
{
    this.game = game;
    guiCam = new OrthographicCamera(400, 400);
    guiCam.position.set(400 / 2, 400 / 2, 0);
    world = new World();
    renderer = new WorldRenderer(game, batch, world);
}

public void draw()
{
    GL20 gl = Gdx.gl;
    gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    renderer.render();
}

@Override
public void show()
{
    world.createLevel();
}

@Override
public void render(float delta)
{
    draw();
}

@Override
public void resize(int width, int height)
{

}

@Override
public void pause()
{

}

@Override
public void resume()
{

}

@Override
public void hide()
{

}

@Override
public void dispose()
{

}

【问题讨论】:

  • 你在 GameScreen 中使用什么样的视口?
  • 我没有使用任何视口,只是一个正交相机

标签: java libgdx


【解决方案1】:

问题出在这行代码:

public void resize(int width, int height)
    {
        viewport.update(width, height, true);

    }

每当您更新视口时,您也在更新底层的 opengl 视口,这会导致黑条持续到第二个屏幕 (https://github.com/libgdx/libgdx/wiki/Viewports)。因此,如果您想将其重置为正常状态,则必须在第二个屏幕 show() 方法中使用以下代码行 (https://github.com/libgdx/libgdx/wiki/Scene2d):

Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

【讨论】:

  • 我也遇到过同样的问题。开始屏幕将是“全屏”,然后当您进入播放屏幕时,屏幕有黑色边框,如果您从播放屏幕返回开始屏幕,则会出现黑色边框。添加:Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());到渲染方法修复它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
相关资源
最近更新 更多