Karena Anda berbicara tentang layar, saya merasa yang terbaik untuk memisahkan semua logika itu menjadi Layar yang berbeda. Apa yang biasanya saya lakukan:
Tentukan antarmuka yang disebut layar, dan minta beberapa layar menerapkannya. Seperti LoadingScreen, MainMenuScreen, GameScreen, GameOverScreen, HighScoreScreen dll. Dalam game Anda, Anda meletakkan variabel yang memegang layar saat ini. Setiap loop, Anda memanggil screen.update () dan membuat layar saat ini. Ini akan menghemat banyak "jika kondisi ini melakukan itu" karena status Anda ditentukan oleh layar saat ini.
Ini akan memisahkan logika Anda dengan sangat baik.
Kode contoh:
### 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();
}
}
Atau tergantung pada pengaturan gim Anda, Anda mungkin memiliki perulangan tak terbatas sebagai gim Anda.
while(true) {
calculatetimesincelastframe()
screen.update(time);
screen.render(time);
}