我目前正在制作一款2D无尽跑酷游戏,计划在万圣节发布。我已经完成了游戏本身,并添加了主菜单,目前正在制作暂停菜单。但是我在设置屏幕时遇到了一个大问题。从主菜单进入游戏的屏幕设置非常完美,但是当我将屏幕设置回主菜单时会出现一些奇怪的情况:
仅供参考,这是我两个屏幕的渲染方法:
主菜单屏幕:
- spriteBatch中的所有内容都不会被呈现,所有东西都只是黑色的框(MainMenuScreen)
- 如果我选择返回游戏,我发现并没有像最初设置为GameScreen时那样重置所有内容
这是我如何切换屏幕的代码:
从打开游戏到主菜单:
public class RadiationPigeon extends Game {
public static final float PPM = 100;
public static SpriteBatch batch;
@Override
public void create () {
batch = new SpriteBatch();
setScreen(new MainMenuScreen(this));
}
@Override
public void render () {
super.render();
}
@Override
public void dispose () {
batch.dispose();
}}
从 MainMenuScreen 到 GameScreen:
private RadiationPigeon radiationPigeon;
public MainMenuScreen(RadiationPigeon radiationPigeon){
this.radiationPigeon = radiationPigeon;
}
playButton.addListener(new InputListener() {
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
return true;
}
public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
radiationPigeon.setScreen(new GameScreen(radiationPigeon));
//I give GameScreen radiationpigeon so that the screen can be set back to MainMenu
}
});
从游戏界面到主菜单:
private RadiationPigeon radiationPigeon;
public GameScreen(RadiationPigeon radiationPigeon){
world.setContactListener(new ContactListener());
Timer timer = new Timer();
timer.schedule(new BatAttackChanceCounter(), 0, 1000);
this.radiationPigeon = radiationPigeon;
}
pauseButton.addListener(new InputListener() {
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
return true;
}
public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
//paused = true;
radiationPigeon.setScreen(new MainMenuScreen(radiationPigeon));
}
});
仅供参考,这是我两个屏幕的渲染方法:
主菜单屏幕:
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
RadiationPigeon.batch.begin();
stage.draw();
RadiationPigeon.batch.end();
}
游戏屏幕:
@Override
public void render(float delta) {
update(delta);
Gdx.gl.glClearColor(0, 0,0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
RadiationPigeon.batch.setProjectionMatrix(pigeoncam.combined);
RadiationPigeon.batch.begin();
//RadiationPigeon.batch.draw(pausedScreen, pigeoncam.position.x - (250 / RadiationPigeon.PPM), pigeoncam.position.y - pigeoncam.viewportHeight / 2, 5, 5);
RadiationPigeon.batch.end();
b2dr.render(world, pigeoncam.combined);
stage.draw();
hud.stage.draw();
}