Tôi đang gặp khó khăn khi triển khai hộp thoại trong chương trình của mình. Chương trình chính không sử dụng sân khấu. Tuy nhiên, khi người dùng ở mức 0, tôi muốn bật hộp thoại khởi động lại trò chơi hoặc thoát khỏi trò chơi.cách triển khai đúng hộp thoại bằng cách sử dụng libgdx
Tôi đã tạo một lớp riêng cho Hộp thoại bằng cách sử dụng mã sau đây.
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;
}
}
Màn hình trò chơi chính không sử dụng sân khấu. Trong phương thức cập nhật tôi có thể tạo lớp GameOver nếu gan đang ở 0
if(intLives == 0) {
if(!boolGameOver) {
dlgGameOver = new GameOver(this);
boolGameOver = true;
} else if(intLives !=0) {
boolGameOver = false;
}
}
trong render phương pháp tôi rút ra những giai đoạn
if(intLives == 0) {
dlgGameOver.getStage().draw();
} else {
//<rest of normal update code follows here>
}
này hoạt động hoàn hảo lần đầu tiên hộp thoại được tạo ra. Khi nhấn khởi động lại trò chơi sẽ khởi động lại (hoặc thực sự thiết lập lại điểm số và cuộc sống). Tuy nhiên, lần thứ hai bạn chạy ra khỏi cuộc sống hộp thoại được hiển thị như mong đợi nhưng các nút sẽ không hoạt động. Bằng cách nào đó có vẻ như người bấm vào không được khởi tạo lần thứ hai.
Tôi có đang làm điều gì đó sai về cơ bản ở đây không? Nếu cách tiếp cận của tôi hoàn toàn sai, tôi cũng rất vui khi nghe nó.
Cái gì? Tại sao lại sử dụng sự phản chiếu ở đây?o_O – noone
Tôi chỉ muốn đưa ra một tùy chọn khác về những gì có thể được sử dụng như một đối tượng ở đây, đó là nghĩa đen tất cả mọi thứ. Tôi sẽ tách nó ra khỏi câu trả lời. –
Được rồi, điều đó có ý nghĩa. – noone