Programmazione del gioco: metodi comuni e modelli di progettazione [chiuso]


9

Ho iniziato a scrivere un motore di gioco molto semplice in modo da poter imparare meglio OpenGL 3.x ma poiché la mia inesperienza e la mia scarsa conoscenza di come un gioco 3D dovesse essere progettato, di solito mi trovo in problemi in cui mi rendo conto che avrei dovuto progettare le mie lezioni in modo diverso. Altri problemi che sto affrontando sono come tenere traccia del tempo in modo conciso nel gioco e aggiornare i movimenti secondo necessità e come dire al renderer che deve ridisegnare. Inoltre continuo a dover eseguire le funzioni Get e Set per il passaggio di vari flag da un oggetto a un altro, è una cattiva pratica?

Quindi, come dice il titolo, sono interessato a tutti i libri o articoli / tutorial e fonti che potrebbero aiutarmi e spiegherebbero alcuni schemi di progettazione comuni nella progettazione dei giochi (ad esempio gestori dello stato dei giochi, caratteri ecc.).

A proposito, sto ancora usando Freeglut, mi consiglieresti di passare a un sistema di finestre migliore prima di progredire o dopo aver compreso meglio OpenGL?


12
Risposta standard "Sto scrivendo un motore" = Scrivi giochi, non motori. I motori sono una profonda tana di coniglio in cui cadere. Che ricerca hai fatto finora? Qui otterrai i migliori risultati selezionando un singolo problema mirato e cercando le domande passate. Continua a cercare nuovi problemi mentre si presentano mentre scrivi il tuo gioco, uno alla volta. Come nota a margine, rendersi conto che le lezioni necessitano di riprogettazione è comune e il processo di fare ciò si chiama "refactoring", significa che stai imparando mentre procedi e questa è una buona cosa.
Patrick Hughes,

1
Grazie per la risposta. Scusami se non sono stato chiaro, non voglio davvero costruire un motore di gioco completo ma mi piacerebbe imparare alcuni schemi di progettazione di base utilizzati nella progettazione del gioco in modo da progettare meglio le mie lezioni. Immagino che dovrebbero esserci alcune soluzioni comuni ai problemi comuni. Più approfondisco la progettazione, più problemi continuano a sorgere e più è difficile trovare risposte. La mia ricerca finora non è stata troppo fruttuosa, un bel tutorial che ho scoperto che approfondisce gli aspetti di un gioco è codeproject.com/Articles/27219/… .
Grieverheart

1
Vedo che inserire "metodi comuni di game engine" nell'intestazione tende a orientare la discussione verso ... engine =) In ogni caso, il motivo per cui ti è difficile ottenere ciò che stai cercando è che ci sono tanti diversi tipi di giochi in quanto ci sono anni in un calendario Maya e ogni tipo ha le sue esigenze. Potresti ottenere risultati migliori se cerchi un tipo specifico di gioco, lo sparatutto in prima persona è molto comune, per dare una certa trazione ai motori di ricerca.
Patrick Hughes,

Uno stile FPS o free-roaming sarebbe quello che sto cercando. In sostanza, vorrei creare un mondo in cui poter sperimentare varie tecniche grafiche e di animazione. Ho già una fotocamera e un movimento di base come il salto e lo strappo e il caricamento del modello, ma non mi sembra giusto, ad esempio inserisco l'animazione di camminata all'interno della classe della fotocamera e utilizzo una variabile interna per contare i fotogrammi. Per lo più sto riparando i buchi e non producendo nulla di robusto. Immagino che faccia parte del processo di apprendimento e forse sto provando a muovermi troppo velocemente.
Grieverheart,

3
codifica del gioco completa, l'architettura del motore di gioco sono due libri sui giochi di codifica, otterrai una panoramica generale della pipeline di sviluppo e della tecnologia sottostante, toccheranno un po 'di tutto
dreta,

Risposte:


11

Scriverò una risposta adeguata da quando ero sul tuo palco circa 2 mesi fa.

Ho iniziato a scrivere un motore di gioco molto semplice in modo da poter imparare meglio OpenGL 3.x ma poiché la mia inesperienza e la mia scarsa conoscenza di come un gioco 3D dovesse essere progettato, di solito mi trovo in problemi in cui mi rendo conto che avrei dovuto progettare le mie lezioni in modo diverso.

Non ti preoccupare. Con la tua mancanza di esperienza, non sarai mai in grado di pensare a tutte le possibilità e i modi in cui una determinata classe verrà utilizzata nel tuo motore. È meglio se si considerano le caratteristiche principali della classe, implementarla e ristrutturarla in seguito. Non cercare di pensare troppo alle cose, in questa fase perderai tempo. Il mio primo gioco è stato un casino completo, sono sicuro che è stato il caso per la maggior parte delle persone.

Altri problemi che sto affrontando sono come tenere traccia del tempo in modo conciso nel gioco e aggiornare i movimenti secondo necessità e come dire al renderer che deve ridisegnare.

Ciò di cui hai bisogno è la conoscenza di cosa sia un loop di gioco. Questo è un buon punto di partenza. Una volta che inizi a scrivere codice più complesso come la gestione della fisica, potresti prendere in considerazione loop con tempi di frame variabili, ma iniziare in piccolo. Per ora, per te è sufficiente un semplice loop di gioco a frame fisso.

Inoltre continuo a dover eseguire le funzioni Get e Set per il passaggio di vari flag da un oggetto a un altro, è una cattiva pratica?

Questa è più una domanda di ingegneria del software. Con il tempo vedrai quali dati devi proteggere e quali sono al sicuro. Probabilmente è meglio se si implementa solo una funzione e poi si vede ciò che non è esposto al di fuori di essa e può essere trattato come un dato pubblico.

È tutta una questione di esperienza. Scriverai una classe di telecamere, quindi vedrai quale funzionalità desideri da essa accanto alle matrici di trasformazione. Se vuoi qualche consiglio immediato, dovrei dire, implementare le ossa nude, estenderle in seguito.

Articoli e libri:

  • Sviluppo del motore di gioco

Questi libri parlano dell'architettura dei moderni motori di gioco e condutture. Ti daranno una buona panoramica della tecnologia di base. Raccomando il primo libro, se devi scegliere, è meno "distorto" verso determinate tecnologie, anche se alla fine vorresti probabilmente superare entrambe, poiché sono ottime fonti di conoscenza.

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • OpenGL

http://ogldev.atspace.co.uk/index.html

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • Rilevazione di collisioni

http://www.peroxide.dk/papers/collision/collision.pdf

(Sto collegando questo perché ho trovato difficile trovare articoli su come viene eseguito il corretto rilevamento delle collisioni 3D.)

Ci sono più libri, ma quando avrai finito (in particolare l'architettura di Game Engine), saprai meglio cosa vuoi.

A proposito, sto ancora usando Freeglut, mi consiglieresti di passare a un sistema di finestre migliore prima di progredire o dopo aver compreso meglio OpenGL?

WinAPI, se ritieni di avere tempo e voglia di imparare la programmazione di Windows (se stai sviluppando per Windows). FreeGLUT va bene per l'apprendimento, ma alla fine vorrai più funzionalità. Tuttavia, se vuoi seguire la strada completamente diversa, puoi avviare OpenGL con librerie come SFML o SDL. Resta con FreeGLUT, a meno che tu non sia testardo come me. Sono andato dritto per WinAPI.


Ehi dreta, grazie mille per la tua bella risposta che stavo aspettando: P! Fortunatamente, so già come eseguire il rilevamento delle collisioni poiché ho già implementato alcuni algoritmi per le simulazioni fisiche :).
Grieverheart,

@ user1294203 fantastico, mi ero perso all'inizio, quindi l'ho pubblicato nel caso
dreta

Io voto per SFML, se non vuoi rovinare troppo il codice specifico della piattaforma. È piccolo, facile, pulito e puoi facilmente immergerti nel codice per capire come avvolge WINAPI, ad esempio.
edin-m,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.