화면에 대해 이야기하고 있기 때문에 모든 논리를 다른 화면으로 분리하는 것이 가장 좋습니다. 내가 일반적으로하는 일 :
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);
}