09
Фев
2017

переключение экранов и общение между классами libGDX

Как лучше всего переключать экраны ? У меня есть PlayState, MainMenu и основной класс MyGame. Когда из одного класса меняю экран на другой то он на очень короткое время меняется, потом обратно становится прежним, но после второго клика на кнопку уже меняется нормально.

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

}

и в классе PlayState такое же переключение. Прошу помочь. Спасибо.

Источник: https://ru.stackoverflow.com/questions/625727/%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%BE%D0%B2-%D0%B8-%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BC%D0%B5%D0%B6%D0%B4%D1%83-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0%D0%BC%D0%B8-libgdx

Тебе может это понравится...

Добавить комментарий