What is the best way to switch screens? I have PlayState, MainMenu and the main class MyGame. When I change the screen from one class to another, it changes for a very short time, then it becomes the same back, but after the second click on the button it changes normally.
public class MyGame extends Game {
public SpriteBatch bat; public OrthographicCamera cam; public MainMenu menu; public PlayState play; public Stage stageMenu; public Stage stagePlay; @Override public void create () { bat = new SpriteBatch(); cam = new OrthographicCamera(); stageMenu = new Stage(new ScreenViewport()); stagePlay = new Stage(new ScreenViewport()); cam.setToOrtho(false, 800, 480); play = new PlayState(this); menu = new MainMenu(this); Gdx.input.setInputProcessor(stageMenu); this.setScreen(menu); } @Override public void render () { super.render(); } @Override public void dispose () { bat.dispose(); menu.dispose(); editmenu.dispose(); } public void setScreenPlay(){ Gdx.input.setInputProcessor(stagePlay); this.setScreen(play); } public void setScreenMenu(){ Gdx.input.setInputProcessor(stageMenu); this.setScreen(menu); } }
public class MainMenu implements Screen {
private MyGame game; private Texture btnT1, btnT2; private TextureRegion btnTR1, btnTR2; private TextureRegionDrawable btnTRD1, btnTRD2; private ImageButton btnStart, btnEdit; public MainMenu(final MyGame game) { this.game = game; btnT1 = new Texture("startbutton.png"); btnT2 = new Texture("editbutton.png"); btnTR1 = new TextureRegion(btnT1); btnTR2 = new TextureRegion(btnT2); btnTRD1 = new TextureRegionDrawable(btnTR1); btnTRD2 = new TextureRegionDrawable(btnTR2); btnStart = new ImageButton(btnTRD1); btnEdit = new ImageButton(btnTRD2); btnEdit.setPosition(Gdx.graphics.getWidth()/2-btnT2.getWidth()/2, Gdx.graphics.getHeight()/3); btnStart.setPosition(Gdx.graphics.getWidth()/2-btnT1.getWidth()/2, Gdx.graphics.getHeight()/2); game.stageMenu.addActor(btnStart); game.stageMenu.addActor(btnEdit); btnStart.addListener(new EventListener() { @Override public boolean handle(Event event) { game.setScreenPlay(); return false; } }); btnEdit.addListener(new EventListener() { @Override public boolean handle(Event event) { game.setScreenPlay(); return false; } }); } @Override public void show() { } @Override public void render(float delta) { Gdx.gl.glClearColor(0.1f, 0.7f, 0.65f, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); game.cam.update(); game.bat.setProjectionMatrix(game.cam.combined); game.stageMenu.act(); game.stageMenu.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() { game.dispose(); btnT1.dispose(); btnT2.dispose(); } }
and in the PlayState class, the same switch. Please help. Thank.