Sto progettando un gioco semplice che utilizza la fisica Java 2D e newtoniana. Attualmente il mio principale "gioco loop" sembra qualcosa di simile:Progettazione del gioco in modalità OO
do {
for (GameEntity entity : entities) {
entity.update(gameContext);
}
for (Drawable drawable : drawables) {
drawable.draw(graphics2d);
}
} while (gameRunning);
quando un'entità è incaricato di aggiornare se stesso che consente di regolare la sua velocità e la posizione sulla base delle attuali forze applicate ad esso. Tuttavia, ho bisogno che le entità mostrino altri comportamenti; per esempio. se un "cattivo" viene colpito da un giocatore, l'entità dovrebbe essere distrutta e rimossa dal mondo di gioco.
La mia domanda: Qual è il modo migliore per ottenere questo in modo orientato agli oggetti? Tutti gli esempi che ho visto fino ad ora incorporano il ciclo di gioco in una classe di Dio chiamata qualcosa come Game
, che esegue i passaggi: rileva collisioni, check-if-bad-guy-killed, check-if-player-killed, repaint , ecc. e incapsula tutto lo stato del gioco (vite rimanenti, ecc.). In altre parole, è molto procedurale e tutta la logica è nella classe di gioco. Qualcuno può consigliare un approccio migliore?
Qui ci sono le opzioni che ho pensato di finora:
- passare un
GameContext
a ciascuna entità da cui l'entità può rimuovere se stesso, se richiesto o aggiornare lo stato del gioco (ad esempio, per "non in funzione", se il giocatore viene ucciso). - Registrare ciascun
GameEntity
come ascoltatore nella classe centraleGame
e adottare un approccio orientato agli eventi; per esempio. una collisione comporterebbe l'accensione diCollisionEvent
nei due partecipanti alla collisione.
Credo di aver trovato il bug - è 'while (gameRunning)' si vuole lì –