Как правильно переключать экраны? - PullRequest
0 голосов
/ 28 сентября 2019

Я новичок в libgdx и пытаюсь переключать экраны, однако я не могу сделать это правильно, я видел похожие вопросы, но ни один из них не помог (

Я ожидал, что экран появится нормально, нокосмический корабль с другого экрана остался на экране меню

так и должно быть

вот так получилось

public class MenuScreen extends Game implements Screen {

...

@Override
public void show() {

...

 play_disabled = new Image(new Texture(Gdx.files.internal("menuButtons/play_disabled.png")));
Menu = new Stage(viewport, batch);

...

Menu.addActor(play_disabled);

...

play_disabled.addListener(new InputListener(){
        @Override
        public boolean touchDown(InputEvent event, float x, float y, int 
pointer, int button) {
            play_enabled.setVisible(true);
            setScreen(new GameScreen());
            return true;
        }
});

...

 }
}



public class GameScreen extends Game implements Screen{
...
private SpaceShip ship;
...
@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0,0,0,1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        batch.begin();
        batch.draw(bg, 0, 0, movement / 4, -240, 800, 720);
        batch.draw(bg2, 0, 0, movement / 2, -240, 800, 720);
        batch.draw(bg3, 0, 0, movement, -240, 800, 720);

        if(is_paused){
            ship.draw(batch);
            ship.drawUI(is_paused);
        }
        else{
            movement += (200 * delta);
            ship.drawUI(is_paused);
            ship.draw(batch);
            ship.doLogic();
        }
        batch.end();
}

...

}

public class SpaceShip extends GameObject{

...

private GameUi controller;

...

public void drawUI(boolean is_paused){
    controller.draw(is_paused);
}

...

}




public class GameUi extends Game{

public GameUi(Texture background, Texture knob, float deadZoneRadius, float x, float y, float width, float height, Polygon shipBounds, Texture bulletTexture){

...

exit_button = new Image(new Texture(Gdx.files.internal("exit.png")));

...

exit_button.addListener(new InputListener(){
        @Override
        public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
            setScreen(new MenuScreen());
            GameScreen.is_paused = false;
            return true;
        }
    });

...

}

public void draw(boolean is_paused) {
    batch.end();
    stage.draw();
    stage.act(Gdx.graphics.getDeltaTime());
    batch.begin();
    font_numbers.getData().setScale(0.3f);
    font_numbers.setColor(Color.CYAN);
    font_numbers.draw(batch, "148932", 537, 467, 100,1, false);
    if(is_paused) {
        batch.draw(PauseBg, 0 ,0 , 800, 480);
    }
    batch.end();
    if (is_paused){
        PauseStage.draw();
        PauseStage.act(Gdx.graphics.getDeltaTime());
    }
    super.render();
    batch.begin();
   }
}
...