2009-12-29 15 views
14

Ho provato a sviluppare un gioco 2D con C++ in passato usando semplici oggetti, tuttavia, nel processo di progettazione non so come e quali parti del motore dovrei suddividere in oggetti più piccoli, cosa dovrebbero fare esattamente e come farli interagire tra loro in modo corretto. Sto cercando libri, tutorial, documenti, tutto ciò che spiega in dettaglio il design del motore di gioco. Grazie.Teoria del progetto di gioco OOP

+2

Si potrebbe voler dare un'occhiata a XNA se solo per vedere come funziona il ciclo di gioco principale. – StrixVaria

+7

Non utilizzare "semplici oggetti". Utilizzare qualsiasi cosa abbia un senso. Il tuo gioco non deve essere rigoroso OOP. Deve funzionare, e dovrebbe preferibilmente essere un codice piacevole e ben strutturato. Né richiede OOP. Scrivi il tuo gioco utilizzando tutti gli strumenti disponibili. Classi, funzioni, funtori, modelli, programmazione procedurale, programmazione orientata agli oggetti, programmazione funzionale, programmazione generica, qualsiasi cosa si adatti al compito da svolgere. Non limitarti a OOP solo perché alcune persone 20 anni fa pensavano che fosse il Santo Graal. – jalf

risposta

19

lettura obbligatoria: http://scientificninja.com/advice/write-games-not-engines

Perché pensi di aver bisogno di un motore di gioco? Scrivi il codice che ti serve per implementare il tuo gioco. Modificalo mentre cambiano i requisiti. E quando hai un gioco completo, fai un passo indietro e guarda come appare il risultato.

All'inizio non è possibile e non si deve presentare un diagramma di classe completo. Descrivi in ​​modo approssimativo quali componenti generali desideri e quali dovrebbero essere le loro responsabilità, quindi prova a codificarlo. Inizia con le classi di cui sei sicuro. Prima o poi, alcuni di essi diventeranno grandi e poco maneggevoli, quindi li divideresti in più di uno più piccolo. A volte, potresti scoprire che diverse classi stanno fondamentalmente facendo la stessa cosa, quindi li unisci di nuovo. Speriamo che, prima o poi, finirai con un disegno che lo funziona a, che è più di quello che otterresti se avessi provato a progettare un motore di gioco in anticipo.

+0

Mi piace l'approccio try & refactor. Crafting OO design prende esperienza – theactiveactor

+6

Anche con l'esperienza, è ancora 1) impossibile, e 2) una cattiva idea per cercare di trovare un disegno dettagliato completo * prima * di implementarlo. C'è una ragione per cui tutta la cosa "agile" è stata catturata così tanto. Tu * incontrerai problemi a cui non avevi pensato, quindi prendi le decisioni di progettazione quando hai le informazioni che ti servono - cioè, quando hai provato a implementarle, e scopri quali sono tutte le insidie. – jalf

4

Se non hai mai fatto una partita, come puoi creare un motore? Ci sono tonnellate di motori gratuiti là fuori o passerai 20 anni a cercare di ottenere qualcosa perché riscriveresti più e più volte.

+0

Sì, ciò che rende un gioco buono è il contenuto non il motore, tutti i buoni programmatori prendono in prestito il codice di altri popoli ogni volta che possono – Patrick

3

Ci sono due tipi importanti di oggetti in un gioco. Esistono oggetti che contengono processi e oggetti che interagiscono con l'ambiente e l'utente.

Per gli oggetti che eseguono un processo come modificare l'opacità degli oggetti, è necessario che siano indipendenti da qualsiasi variabile di livello di classe. Dovrebbero semplicemente prendere in (e) valore (i) e restituire (i) valore (i). Se si dispone di un processo per calcolare la gravità, il processo dovrebbe prendere nell'oggetto in cui viene calcolata la gravità e restituire la quantità di gravità che l'oggetto sta vivendo e la direzione della gravità se il gioco si svolge nello spazio.

I secondi tipi di oggetti più importanti sono quelli che interagiscono con l'utente e l'ambiente. Questi oggetti dovrebbero tutti ereditare la stessa classe base. La classe base richiederà un'immagine e la posizione xey e possono avere variabili che eseguono processi specifici come cambiare la velocità o la direzione della variabile. Con questa classe base in atto è quindi possibile eseguire processi come il processo gravitazionale menzionato in precedenza utilizzando tutte le variabili "built-in" come velocità, direzione e posizione xey.

Si desidera anche impostare gli oggetti per eseguire peices di codice in determinate condizioni. Potrebbe essere una buona idea avere la classe base che fornisce funzioni che vengono eseguite quando una di queste condizioni viene soddisfatta. Alcune funzioni condizionali utili sono una funzione condizionale che va avanti quando viene creato un oggetto e quando viene distrutto. Una funzione condizionale per andare dopo che è stato impostato un timer. Un funzionale condizionale per andare continuamente dove è possibile inserire il codice per disegnare immagini sullo schermo. Una funzione condizionale da disattivare Quando viene premuto un tasto della tastiera o del mouse.Una funzione condizionale per uscire da una quantità prestabilita di volte al secondo per calcolare cose come la gravità su un oggetto.

Questo framework ha funzionato molto bene per me durante la creazione di giochi. Funziona per qualsiasi tipo di gioco e funziona in modo orribile per altri tipi di programmi. Scusa se la mia scrittura non è chiara, sto scrivendo sul mio iPod e sarebbe difficile per me tornare indietro e modificare le cose qui.