come detto da Josh Petrie :
" Non costruita qui sindrome ;"
Sto anche scrivendo il mio motore, e suppongo che la ragione sarà diversa per ogni sviluppatore là fuori, ma in realtà - in genere non mi piace lavorare nel codice di altre persone. Sono compulsivo, nel senso che se sento di poterlo costruire da solo, allora non ha senso accontentarsi di qualcos'altro .
Ho testato vari tipi di motori di gioco, rendering API e simili, in particolare Ploobs, UNITY WaveEngine, XNAFinalEngine, Love, Ogre, ecc. Molti altri ... Volevo iniziare a scrivere giochi - Ho scaricato molto cercando un buon confort e punto di ingresso ben documentato ...
Il mio problema, tuttavia, era al momento in cui non avevo idea di cosa stesse succedendo sotto il motore. Volevo un buon controllo e volevo un quadro che conosco come il palmo della mia mano. Mi è venuta l'idea "HEY! Penso che l'unico modo per imparare come funziona e capire è provare a costruire il mio motore interamente e completamente da zero. La maggior parte della mia storia di programmazione era con soluzioni Web ed elaborazione - per me è stato un gioco di palla completamente nuovo.
È quello che ho finito per fare.
Quindi ho scelto di configurare XNA poiché conoscevo già C # e ho iniziato a pensare a come o dove avrei dovuto iniziare. Avevo bisogno di un'idea.
Ho deciso che, in ogni caso, sarei passato direttamente al 3D .
Abbattere le nozioni di base è stato bello - la roba batch di sprite, ma mentre progredivo ho scoperto nuove barriere e ostacoli - il mio primo vero è stato il limite batch . Il mio obiettivo era quello di costruire un gioco che potesse rendere in qualsiasi momento almeno 10000 entità nel frustum della vista.
Ho intrapreso un nuovo viaggio nell'implementazione di Shader Based Instancing (e ho imparato HLSL mentre ero lì), ho abbandonato gli oggetti Model ed Effect incorporati di XNA per scrivere invece i miei sostituti. Inizialmente ho avuto difficoltà a comprendere i flussi VBO; Ho rotto le cose - sono andato online facendo domande sull'istanza e ho continuato fino a quando ho finalmente capito cosa stava facendo la GPU. Ha pagato; ora avevo oltre ventimila entità di test che si ingrandivano nel mio viewport dopo un paio di giorni di debug del mio VBO con PIX (dxsdk).
Ora avevo "qualche" idea di come funzionavano le pipeline di rendering, ma non avevo ancora finito - ho finito per creare il mio stato di gioco, camera, effetti post e oggetti entità, allontanandomi dalla pipeline di contenuti XNA costruendo la mia caricatori (avversione personale verso la cosa XNB), ha creato una complessa catena di geometria ordinata in profondità e separata dallo stato di fusione e ha anche istinto sprite e testo proiettati nella scena di gioco.
Ho continuato ad aggiungere, aggiustare, cambiare e sperimentare continuamente questo per quasi un anno intero. Alla fine, è uscito abbastanza bene. Ora ho capito cosa sta succedendo sotto il cofano, perché l'ho creato - il mio bambino.
Ora il mio motore era per lo più stabile e quasi finito. Non è perfetto: lo scripting è noioso e la GUI non è stata affatto eccezionale. Ma l'ho ancora amato. Migliaia di righe di codice, risorse e media - racchiuse in un repository git privato da 2 GB e tutti i mal di testa che ho dovuto affrontare cercando di fare un tipo di sviluppo che non avevo mai fatto prima. Ogni ostacolo che ho superato è stata una lezione appresa e un sollievo.
Ho realizzato quasi tutto ciò che volevo.
Ma alla fine - ho deciso che era tempo di metterla giù.
Per quanto mi accontenti di scrivere un motore così grande da solo, con i consigli della rete e altri amici di Gamingev, ho deciso che lo farò di nuovo tutto da capo - e lo farò meglio - perché ora questa volta lo so per lo più cosa sto facendo.
Quel progetto è ancora nascosto nel mio repository GIT.
Il mio secondo passaggio nello scrivere un nuovo motore (questa volta su MonoGame) sta procedendo bene. Quando qualcosa si rompe, è più facile da risolvere. Meno confusione. Spero di mostrare pubblicamente il mio gioco quest'anno, perché tendo ad essere un po '"troppo" attaccato al mio codice.
Alla fine, scrivendo il mio motore è come ho imparato "come" farlo, pur potendo dire che conosco e capisco esattamente cosa fa ogni componente e come dovrebbero funzionare. In realtà odio leggere il codice di altre persone, specialmente per grandi progetti non documentati. Voglio che tutto ciò che uso sia costruito da me.
Questo sono solo io però. Dubito che userò mai un motore prefabbricato, probabilmente perché penso che sia solo più divertente per me scrivere i miei framework piuttosto che sedermi e gestire il codice di qualcun altro - il pieno controllo.