画面について話しているので、そのロジックをすべて別の画面に分離するのが最善だと思います。私が通常行うこと:
screenというインターフェースを定義し、複数の画面でそれを実装します。LoadingScreen、MainMenuScreen、GameScreen、GameOverScreen、HighScoreScreenなど。ゲームでは、現在の画面を保持する変数を配置します。ループごとに、screen.update()を呼び出し、現在の画面をレンダリングします。これにより、現在の画面で状態が定義されているため、「この状態でそれを行う場合」に多くのことを節約できます。
これにより、ロジックが非常に適切に分離されます。
コード例:
### 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();
}
}
または、ゲームの設定によっては、ゲームとして無限ループが発生する場合があります。
while(true) {
calculatetimesincelastframe()
screen.update(time);
screen.render(time);
}