Ekranlardan bahsettiğiniz için, tüm bu mantığı farklı Ekranlara ayırmanın en iyisi olduğunu düşünüyorum. Normalde ne yaparım:
Ekran adı verilen bir arabirim tanımlayın ve birden çok ekranın onu uygulamasını sağlayın. LoadingScreen, MainMenuScreen, GameScreen, GameOverScreen, HighScoreScreen vb. Oyunda mevcut ekranı tutan bir değişken koyarsınız. Her döngüde, screen.update () öğesini çağırır ve geçerli ekranı oluşturursunuz. Durumunuz geçerli ekran tarafından tanımlandığı için bu size çok fazla "bu durum bunu yaparsa" kazandırır.
Bu, mantığınızı çok güzel bir şekilde ayıracaktır.
Örnek kod:
### 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();
}
}
Veya oyun kurulumunuza bağlı olarak, oyununuz olarak sonsuz bir döngüye sahip olabilirsiniz.
while(true) {
calculatetimesincelastframe()
screen.update(time);
screen.render(time);
}