Libgdx gameover不';不运行新屏幕?

Libgdx gameover不';不运行新屏幕?,libgdx,Libgdx,我做了我的第一个游戏,当主要演员被击中时死亡,游戏结束了 我的创业班 public class MyGdxGame extends Game { MenuScreen menuScreen; GameScreen gameScreen; GameOver gameOverScreen; @Override public void create() { menuScreen = new MenuScreen(this); gameScreen = new GameScreen

我做了我的第一个游戏,当主要演员被击中时死亡,游戏结束了

我的创业班

public class MyGdxGame extends Game {

MenuScreen menuScreen;
GameScreen gameScreen;
GameOver gameOverScreen;


@Override
public void create() {
    menuScreen = new MenuScreen(this);
    gameScreen = new GameScreen();
    gameOverScreen = new GameOver(this);
    AssetsLoader.load();
    setScreen(new MenuScreen(this));
}

@Override
public void dispose(){
    super.dispose();
    AssetsLoader.dispose();
}
MenuScreen.class

public class MenuScreen implements Screen {

private GameState currentState;

Skin skin;
Stage stage;
SpriteBatch batch;

Game g;
public MenuScreen(Game g){
    create();
    this.g=g;
}
...
textButton.addListener(new ChangeListener() {
        public void changed (ChangeEvent event, Actor actor) {
            //System.out.println("Clicked! Is checked: " + button.isChecked());
            textButton.setText("Starting new game");
            g.setScreen( new GameScreen());

        }
    });
public class GameScreen implements Screen {

private GameWorld world;
private GameRenderer renderer;
private float runTime;
MyGdxGame game;



public GameScreen(){
    game = new MyGdxGame();
    float screenWidth = Gdx.graphics.getWidth();
    float screenHeight = Gdx.graphics.getHeight();
    float gameWidth = 600;
    float gameHeight = screenHeight / (screenWidth / gameWidth);

    int midPointY = (int) (gameHeight / 2);
    int midPointX = (int) (gameWidth /2);

    world = new GameWorld();
    renderer = new GameRenderer(world, (int) gameHeight, midPointY);

    Gdx.input.setInputProcessor(new InputHandler(world.getNinja()));


}


@Override
public void render(float delta) {
    runTime += delta;
    world.update(delta);
    renderer.render(runTime);
    if(world.ninjaDead == true){
        game.setScreen(new GameOver(game));
...
GameScreen.class

public class MenuScreen implements Screen {

private GameState currentState;

Skin skin;
Stage stage;
SpriteBatch batch;

Game g;
public MenuScreen(Game g){
    create();
    this.g=g;
}
...
textButton.addListener(new ChangeListener() {
        public void changed (ChangeEvent event, Actor actor) {
            //System.out.println("Clicked! Is checked: " + button.isChecked());
            textButton.setText("Starting new game");
            g.setScreen( new GameScreen());

        }
    });
public class GameScreen implements Screen {

private GameWorld world;
private GameRenderer renderer;
private float runTime;
MyGdxGame game;



public GameScreen(){
    game = new MyGdxGame();
    float screenWidth = Gdx.graphics.getWidth();
    float screenHeight = Gdx.graphics.getHeight();
    float gameWidth = 600;
    float gameHeight = screenHeight / (screenWidth / gameWidth);

    int midPointY = (int) (gameHeight / 2);
    int midPointX = (int) (gameWidth /2);

    world = new GameWorld();
    renderer = new GameRenderer(world, (int) gameHeight, midPointY);

    Gdx.input.setInputProcessor(new InputHandler(world.getNinja()));


}


@Override
public void render(float delta) {
    runTime += delta;
    world.update(delta);
    renderer.render(runTime);
    if(world.ninjaDead == true){
        game.setScreen(new GameOver(game));
...
还有GameOver.class

public class GameOver implements Screen{
private GameState currentState;

Skin skin;
Stage stage;
SpriteBatch batch;
MyGdxGame game;

int scores;
public GameOver(MyGdxGame game) {
    this.game = game;
     create();
Gdx.app.log("startGameOver", "");
....
public void render (float delta) {
    Gdx.gl.glClearColor(0.2f, 0.2f, 0.2f, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1 / 30f));
    stage.draw();
    //   Table.drawDebug(stage);
}

基本上GameOver类正在启动,因为日志显示“startGameOver”,但屏幕显示我的游戏(GameScreen)仅移动输入停止工作。我想我喊停止渲染游戏屏幕,清除屏幕,但我不知道怎么做

我建议您将GameScreen的构造函数更改为
publicGameScreen(MyGdxGame游戏){this.game=game;…}
。当您的
MyGdxGame
类中有一个构造函数时,为什么要创建一个
newgameover()
呢?如果没有newgameover(),我会得到NPE。在我应该在MyGDXGame中给出的每个屏幕上都有很好的建议。现在模拟人生可以正常工作了。我建议您应该将GameScreen的构造函数更改为
公共GameScreen(MyGdxGame){this.game=game;…}
。当您的
MyGdxGame
类中有一个构造函数时,为什么要创建一个
new GameOver()
呢?如果没有new GameOver(),我会得到NPE。在我应该在MyGDXGame中给出的每个屏幕上都有很好的建议。现在sims可以正常工作了。