私のプログラムでは、ダイアログボックスを実装するのに苦労しています。メインプログラムはステージを使用しません。しかし、ユーザーの生活が0になったら、ゲームを再起動するかゲームを終了するダイアログをポップアップしたいと思います。libgdxを使ってダイアログボックスを正しく実装する方法
次のコードを使用して、ダイアログ用に別のクラスを作成しました。
public class GameOver {
//dialog game over
private Dialog dlgGameOver;
private Skin skin;
private Stage stage;
private TextButton btnMain;
private TextButton btnTryAgain;
private GameScreen gameScreen;
public GameOver(final GameScreen gameScreen){
//create the game over dialog
this.gameScreen = gameScreen;
skin = new Skin(Gdx.files.internal("uiskin.json"));
dlgGameOver = new Dialog(" ",skin);
stage = new Stage();
btnMain = new TextButton("Main", skin);
btnTryAgain = new TextButton("Try Again", skin);
dlgGameOver.text("Game over!");
dlgGameOver.button(btnTryAgain);
dlgGameOver.button(btnMain);
dlgGameOver.show(stage);
btnMain.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
System.out.println("Button Pressed");
}
});
btnTryAgain.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
gameScreen.setIntLives(3);
gameScreen.setIntScore(0);
System.out.println("Button Pressed");
}
});
Gdx.input.setInputProcessor(stage);
}
public Stage getStage() {
return stage;
}
}
メインゲーム画面はステージを使用していません。肝臓は、renderメソッドでは0
if(intLives == 0) {
if(!boolGameOver) {
dlgGameOver = new GameOver(this);
boolGameOver = true;
} else if(intLives !=0) {
boolGameOver = false;
}
}
である場合、更新方法では、私は、ステージこれは完全にダイアログが作成された初めての作品
if(intLives == 0) {
dlgGameOver.getStage().draw();
} else {
//<rest of normal update code follows here>
}
を描くゲームオーバークラスを作成します。再起動するとゲームが再開されます(または実際にスコアと寿命がリセットされます)。しかし、2度目の生活習慣がなくなると、ダイアログは期待通りに表示されますが、ボタンは機能しません。どうにかして、clicklistenerが2回目に初期化されていないようです。
私はここで何か根本的に間違っていますか?もし私のアプローチが完全に間違っていれば、私もそれを聞いてうれしいです。
何ですか?なぜここで反射を使用するのですか?o_O – noone
ここでは、文字通りすべてのもので、ここでオブジェクトとして使用できるものについて別のオプションを与えたかっただけです。私は答えからもっと分けます。 –
さて、それは理にかなっています。 – noone