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可以正常工作了。