Vì bạn đang nói về màn hình, tôi cảm thấy tốt nhất nên tách tất cả logic đó thành các Màn hình khác nhau. Những gì tôi thường làm:
Xác định một giao diện được gọi là màn hình và có nhiều màn hình thực hiện nó. Giống như LoadingScreen, MainMothyScreen, GameScreen, GameOverScreen, HighScoreScreen, v.v. Trong trò chơi của bạn, bạn đặt một biến giữ màn hình hiện tại. Mỗi vòng lặp, bạn gọi screen.update () và hiển thị màn hình hiện tại. Điều này sẽ giúp bạn tiết kiệm rất nhiều "nếu trạng thái này làm điều đó" vì trạng thái của bạn được xác định bởi màn hình hiện tại.
Điều này sẽ tách logic của bạn rất độc đáo.
Mã ví dụ:
### Screen interface ###
public interface Screen {
public void show();
public void update(float delta);
public void render(float delta);
public void hide ();
}
### An implementation of screen ###
public class MainMenuScreen implements Screen {
private Game game;
public MainMenuScreen(Game game) {
this.game = game;
}
public void show() {
// init stuff
}
public void update(float delta) {
// react to clicks, update animations etc.
if (buttonwasclicked) {
game.setScreen(new GameScreen(game)); // change the screen
}
}
public void render(float delta) {
// draw everything
}
public void hide() {
// release all resources, as the screen is being hidden
}
}
### Game, drawing the appropriate screen ###
public class Game {
public Screen screen;
public void update() {
screen.update(getDeltaTime);
screen.render();
}
public void setScreen(Screen screen) {
this.screen.hide();
this.screen = screen;
this.screen.show();
}
}
Hoặc tùy thuộc vào thiết lập trò chơi của bạn, bạn có thể có một vòng lặp vô hạn như trò chơi của bạn.
while(true) {
calculatetimesincelastframe()
screen.update(time);
screen.render(time);
}