【发布时间】: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 中使用什么样的视口?
-
我没有使用任何视口,只是一个正交相机