簡體   English   中英

Libgdx切換屏幕和視口

[英]Libgdx Switching Screens and Viewports

嗨,我在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()
{

}

好的,我發現了這一行代碼的問題:

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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM