Ich implementiere ein Spiel in Java, mit den unten gezeigten Klassen, um die Spiellogik zu steuern. Ich versuche sehr klar zu sein, wenn ich meine Frage erläutere.separate Logik und GUI in Java
Gamepanel
I diese Klasse verwenden, um die Spielschleife mit einem Gewinde zu starten (nur Spielschleife)
public void run() { init(); //initialize gamePanel components // game loop while (running) { start = System.nanoTime(); gameManager.update(); KeyInput.update(); MouseInput.update(); gameManager.draw(graphic); Graphics g2 = getGraphics(); g2.drawImage(image, 0, 0, null); g2.dispose(); elapsed = System.nanoTime() - start; wait = targetTime - elapsed/1000000; if (wait < 0) wait = 5; try { Thread.sleep(wait); } catch (Exception e) { e.printStackTrace(); } }
GameManager
Ich habe diese Klasse jeden Aspekt des Spiels zu steuern, wie (update, Grafiken)
private void loadState(int state) { if (state == States.MENU.getValue()) gameState = new Menu(this); else if (state == States.GAME.getValue()) gameState = new Game(this); else if (state == States.PATHSELECT.getValue()) gameState = new SelectPath(this); } public void update() { if (gameState != null) gameState.update(); } public void draw(java.awt.Graphics2D graphic) { if (gameState != null) gameState.draw(graphic); else { JOptionPane.showMessageDialog(null, JOptionPane.ERROR_MESSAGE); } }
Gamestate
GameState ist eine abstrakte Klasse, die als Konstruktorparameter ein inst ance von GameManager und es hat abstrakte Methoden in jedem GameState implementiert (Menü, Spiel, MultiPlayer, etc ..)
diese Klasse diese abstrakten Methoden hat:
Regler() - >, dass die Zustandslogik
update() überprüfen -> bei der current ist ein multyplayer, rufen Sie diese Methode der Update-Methode der Klasse Player, etc ...
draw (Graphics g) -> ziehen die Objekte des current
I zur Herstellung einer Utility-Klasse Singleton gedacht zu screenen, die alle Unentschieden implementiert() von jedem Staat, aber es ist sehr unangenehm, alle in einer einzigen Klasse einzufügen.
Beispiel:
statt gameState.draw(graphic);
des Aufrufs Ich nenne Render.getRenderInstance().draw(graphic,gameState);
diese Lösungen funktioniert, aber ich mag es nicht.
Also wie kann ich die Draw-Methode vom Rest der Logik auf eine schöne Weise teilen?
Einige Ratschläge?Vielen Dank.
Ich schlage vor, dass Sie diese Frage unter http://gamedev.stackexchange.com/ stellen, da Fragen bezüglich der Rendering-Pipeline zu spezifisch sind. – setec