Qual è il motore di gioco open source meglio progettato per fare un esempio? [chiuso]


15

Possibile duplicato:
dove posso trovare buoni esempi (ben organizzati) di codice di gioco?

Ho codificato diversi giochi C ++ e ora sto costruendo il mio motore di gioco ed editor.

Ho qualche dubbio sul design e desidero trovare ottimi esempi da seguire.

Qual è il migliore progettato secondo te?

Deve essere orientato agli oggetti. Il linguaggio di programmazione non ha importanza, ma preferisco in questo ordine: C ++, C #, Java o un altro simile.

EDITED: Per chiarire di più, non mi interessa il codice specifico del gioco. Voglio motori di gioco generici.

EDITED: Questo articolo spiega cos'è un motore di gioco: motore di gioco su Wikipedia ed ecco un elenco di motori di gioco conosciuti: elenco di motori di gioco su Wikipedia


3
Capisci davvero la mia domanda? Vorrei motori di gioco (non solo giochi ). E ho richiesto Deve essere orientato agli oggetti . Nel thread che hai detto, le risposte sono solo per i giochi (Doom3, Prototype, ecc.) E c'è anche un toolkit grafico (OpenSceneGraph) ma non c'è nulla di specifico sui "motori di gioco" su quel thread ... Puoi chiudere o cancella la mia domanda se non ti piace, ma non capisco il voto negativo ... :( La mia domanda non è la stessa
Dani

2
Per chiarire ancora di più, non sono interessato al codice specifico del gioco. Voglio motori di gioco generici.
Dani

3
C'è una differenza: non tutti i giochi funzionano su un motore generico. Doom3 ha un motore specifico per FPS, Prototype è diverso, e così via ... Forse hanno qualcosa in comune (gestione delle risorse, scripting ...) ma questo non è rilevante per la mia domanda. La mia domanda inizia con la frase "Ho codificato diversi giochi C ++". Ribadisco: il mio bisogno è trovare un buon codice sorgente del motore di gioco per scopi generici. Non è una fonte di gioco per la ricerca di codice riutilizzabile.
Dani

1
Doom 3 ha un "motore specifico FPS" ma ha anche tutte le parti di cui un motore generico ha bisogno - come dici tu, gestione delle risorse e scripting, rendering 3D, fisica e così via. È un motore generico e altro , non in qualche modo meno.

2
@Joe Wreschnig Sono propenso a concordare con @Dani su questo argomento. Sebbene tutti i giochi siano alimentati da una qualche forma di motore, i modelli architettonici utilizzati per un motore "unico" e un motore progettato per funzionare su più titoli sono abbastanza diversi, anche se entrambi hanno script, gestione delle risorse, rendering 3D, componenti ecc. Inoltre, guardare il codice per un gioco costruito su un motore sviluppato dallo stesso studio non è probabilmente la scelta più saggia, in quanto non ti darà una vera indicazione di quanto sia flessibile e facile da usare il motore in un ambiente di terze parti.
Ari Patrick,

Risposte:


6

Penso che il modo migliore per costruire un motore di gioco sia iniziare con ciò che già conosci abbastanza bene e aggiungere quelle funzionalità che sono noiose o ripetitive.

Ad esempio, faccio molto con Python / pygame (che è un wrapper SDL) Mi piace un po 'il sistema, ma tre cose mi hanno infastidito:

  • Costruire il ciclo dell'animazione è noioso e sono praticamente tutti uguali.
  • L'oggetto sprite di base è molto limitato. Volevo uno sprite migliorato con direzione e velocità, capacità di gestire varie condizioni dei bordi dello schermo, immagini multiple e schemi di collisione multipli.
  • Pygame non ha funzionalità di interfaccia utente. Volevo semplici etichette, pulsanti e un selettore numerico che
    potessi facilmente aggiungere ai miei giochi.

È stato relativamente facile creare un wrapper orientato agli oggetti attorno a queste funzionalità. Dai un'occhiata al capitolo 10 e alla documentazione di Game Engine disponibile qui: http://aharrisbooks.net/pythonGame/

(Questo è stato scritto come parte di un libro, ma sei il benvenuto nel motore di gioco anche se non vuoi il libro.)

Il capitolo 10 spiega le motivazioni e le tecniche per costruire un motore di gioco 2D di base. Potresti divertirti mentre costruisci il tuo. Il linguaggio effettivo non è così importante (tranne ovviamente per il supporto di OOP è necessario un linguaggio OOP). Se stai già utilizzando SDL con C ++, potresti iniziare adattando il mio motore a C ++ / SDL.


8

Il venerabile design del motore Quake (ID tech) ha resistito alla prova del tempo ed è probabilmente il design del motore di gioco di maggior successo di tutti i tempi. Tutto, tranne il renderer, è rimasto sostanzialmente invariato dalla fine della metà degli anni '90 ed è ancora utilizzato in giochi moderni come ETQW.

Il codice sorgente completo per quattro iterazioni di questo motore (Quake da 1 a 3, più Wolf ET) è disponibile sotto licenza GPL. Probabilmente ci sono oltre un centinaio di motori di gioco basati su Quake, sviluppati attivamente e supportati dalla comunità, che li mantengono rilevanti nell'era moderna. Particolarmente degno di nota è XreaL per il suo fantastico renderer e ioQuake3 per la sua fedele manutenzione di Quake 3 ottimizzata per l'hardware moderno. Inoltre, per le versioni ID "ufficiali" più recenti del motore, è disponibile anche la logica di gioco (non l'intero motore).

Anche se non finisci per usare questo motore di gioco, è degno di studio per la sua ben concepita architettura di separazione client-server e la separazione della logica di gioco da dettagli di basso livello.


1
Tuttavia, non definirei esattamente orientato agli oggetti tecnologici id pre-Doom3.
Tetrad,

3
No, non orientato agli oggetti, ma come ho detto, è degno di studio. Voglio dire, dai, solo perché è procedurale non significa che ti darà il cancro agli occhi se lo guardi! ;)
Max E.

6

La libreria di rendering Ogre3D è abbastanza vicina al codice del motore e da tutti gli account che ho sentito è molto ben progettata e molto OO.

http://www.ogre3d.org/


+1 Ottimo motore. Grazie Tetrad! Lo so già, ma non ho mai usato né visto il suo codice sorgente. Sai se ha un'intelligenza artificiale integrata (es. Ricerca di percorsi, ecc.)
Dani

3
Penso che sia tutto solo relativo al rendering.
Tetrad,

2
Ogre è solo una libreria di rendering grafico. Motore di rendering grafico orientato agli oggetti.
Jonathan Sternberg,

0

Quando si parla di motore di gioco, immagino che tu stia pensando a qualcosa che non sia il motore di rendering, il motore audio, il motore fisico, il motore di input, ecc.

Quindi potresti pensare all'architettura di gioco, all'IA o al modello / sistemi di progettazione ecc., Che vengono utilizzati per strutturare un software nella gestione di dati e altri componenti per creare una sorta di scena / thater / illusione, producendo così un set gestibile di regole per modificare per creare un vero "videogioco".

Questo è l'effettivo livello superiore di un videogioco e ho anche cercato di imparare un po 'su di esso, è vasto, complicato e richiede molta conoscenza di tutte le altre materie. Immagina di voler ricreare una realtà alternativa dal nulla, tenere traccia e calcolare ogni singolo evento e rigenerare dati precisi da quelli, in qualsiasi momento: per ogni tipo di gioco esiste un qualche tipo di motore di gioco secondario, e io non Penso che in realtà sia possibile realizzare un motore generico matematicamente abbastanza veloce. Anche per un gioco in cui controlli un singolo personaggio, ci sono ancora molte cose che possono variare e che possono comunque richiedere al gioco di cambiare l'intera architettura.

L'industria del gioco non è ben servita dall'open source come altri campi dell'informatica, solo perché l'intrattenimento ha diversi tipi di licenze, che coinvolgono licenze artistiche: il prodotto di gioco è pagato solo da un cliente, e AFAIK, c'è solo pochi motori che sembrano abbastanza buoni da funzionare per te: Hord3d, NeoAxis, blendelf, Panda3D. Ma non posso assicurarti che saranno tanto facili da usare come strumenti come Unity, Torque, C4 e altri; tieni presente che un motore di gioco è, con il renderer grafico, penso che il tipo di software più difficile che troverai nel gioco.


0

Per me usare Python con Pygame è una buona soluzione. Forse Python è un po 'lento ma per i computer di oggi e se cerchi solo di ottimizzare il tuo gioco, non importa. Pygame ha un'ottima documentazione sul sito originale di pygame. Ma prima prendi l'inizio di un tutorial per imparare alcune basi. Per l'ottimizzazione della velocità (conversione di immagini, ...) avrai bisogno di altri esempi che sono facili da trovare.

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.