当前位置: 首页 > 知识库问答 >
问题:

Libgdx切换屏幕和视口

终波涛
2023-03-14

嗨,我在libgdx切换屏幕时遇到了问题。我正在建造一个小行星游戏克隆。因此,首先呈现我的Main MenuScreen类(使用Fitviewport),然后我调用setScreen()到GameScreen(GameScreen不使用Fitviewport),除了第二个屏幕呈现为使用Fitviewport。如果我调整第二个屏幕的大小,那么整个窗口用于渲染。为什么会发生这种情况?这里有一些图片...

MainMenuScreen类

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

我希望游戏屏幕使用所有窗口区域进行渲染,而不是像主菜单那样有黑色条。我也没有在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);
            };
        });

             ....
    }

这是我的游戏屏幕类:

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

}

共有1个答案

呼延原
2023-03-14

好了,伙计们,我找到问题了,这行代码:

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());
 类似资料:
  • 在libGDX中切换屏幕似乎有问题。它会切换到游戏屏幕,但不会切换回主屏幕,也不会切换到屏幕上的游戏。我的游戏课: 我的GameScreen类(实现屏幕): 这就是我如何更改屏幕(不工作): 你可以在这里找到全部来源。

  • 问题内容: 大家好,我仍在从事这个libgdx项目的工作,我试图找出将屏幕切换到游戏屏幕的最佳方法。现在,当单击一个按钮时,我需要它来切换到游戏屏幕。我已经看到了一些扩展游戏类的实现方式,但是我不确定这里最好的方法是什么。如果您看到一些可以改进的代码,请告诉我。 这是主要的应用程序类: 问题答案: 这就是我始终执行屏幕切换的方式: 首先,主类需要扩展Game(From ),然后您需要具有一个新的t

  • 大家好,我仍然在做这个libgdx项目,我正在努力找出最好的方法来改变我的游戏屏幕现在,当一个按钮被点击时,我需要它转换到游戏屏幕。我见过一些扩展game类的实现,但我不确定从这里开始最好的方法是什么。如果你看到一些可以改进的代码,请让我知道。 以下是主要的应用程序类:

  • 我是Libgdx新手,我编写了一个扩展游戏类的类,问题是游戏中的setScreen()方法没有交换屏幕,因为在我设置屏幕之后,我的游戏仍然只渲染游戏类中渲染方法中的内容,而不是screen类的渲染方法中的内容。代码如下: 如果用户运行此代码,即使在用户触摸(单击)屏幕时更改屏幕,我也只会看到一个红色屏幕

  • 我们正在使用libgdx开发一款游戏,我们希望能够切换屏幕。我制作了一个GameOverScreen,它实现了Screen: 我的问题是我不知道如何在我的主课上设置屏幕。我看到的大多数示例都显示了一个扩展游戏的主类(com.badlogic.gdx.Game)。但我们的主类实现ApplicationListener,不扩展游戏: 因此,我不能使用来自Game类的setScreen方法。所以我如何能

  • 当我的游戏结束时,我试图改变屏幕到游戏结束屏幕,但它没有这样做,只是闪烁当前的游戏屏幕。 游戏结束画面