Giochi o motori basati su componenti open source?


15

Ho letto qualcosa sulla progettazione di giochi basati su componenti, ma ho ancora qualche problema per capire esattamente come faresti per implementarlo. Ci sono buoni esempi di giochi basati su componenti o motori di gioco che potrei leggere per avere un'idea migliore di questo?

Risposte:


7

Personalmente non credo ci siano buoni esempi, soprattutto perché la definizione di "sistema basato su componenti" per i giochi è così vagamente definita che può significare quasi nulla.

Alcune delle discussioni in questa risposta potrebbero essere utili: Come implementare un sistema basato su componenti per oggetti in un gioco Web

Nel complesso, tuttavia, l'approccio è semplicemente quello di cambiare qualsiasi tipo di GameObject o Actor da una classe di grandi dimensioni che gestisce tutti i comportamenti in una classe più semplice che contiene oggetti che svolgono comportamenti. Penso che lavorare su questo e creare componenti diversi adatti al tuo gioco sarà spesso il modo migliore per procedere.


Lo sento. Quando ho cercato di trovare buone risorse su di esso, ho scoperto che quasi ogni persona usa una terminologia diversa per descrivere le cose. Ha reso difficile il confronto tra diverse implementazioni quando si impiega metà del tempo a tradurre le strutture di base. Entity System, Component System, Game Object, Template, Assembly, Component Assemblage, etc ...
Leniency

2

Ecco alcune risorse che potrebbero piacerti:
c'è questo fantastico thread. Non è un motore di gioco in sé, ma il design e la discussione sono fantastici.
Una domanda su StackOverflow su un argomento molto simile.

Per rispondere alla domanda originale, il framework Elephant in C # è esattamente quello che vuoi: è stato interrotto, ma esiste ancora qui come riferimento per l'implementazione.


1

Questo sito inizia in un'implementazione di base.

La maggior parte di quanto sopra è ispirato a questo articolo su T = Machine

Ho iniziato con un'implementazione di base ispirata ai due collegamenti precedenti. Sono abbastanza sicuro di essermi discostato molto dalla pura teoria dei sistemi componenti e che ci siano sicuramente dei bug, ma potrebbe rivelarsi utile se stai cercando alcuni semplici esempi.

Bricle (C # / XNA)

In questo momento sta solo caricando alcune entità di base, gestisce alcuni eventi, ecc. Le posizioni principali che stai cercando sono la cartella Engine.EntitySystem e probabilmente il PlayScreen in cui le entità vengono effettivamente create.

Creare un semplice negozio di componenti basato sul tipo e nascondere quello dietro un comune EntityManager era relativamente semplice.

La prima sfida che ho incontrato è stata quando i singoli sistemi potevano richiedere più tipi di componenti (ad esempio, componenti fisici e InputMoveable). Per usare il linguaggio del database relazionale, ho dovuto trovare un modo per fare una query JOIN. Per questo, ho creato un altro tipo di raccolta per le entità create dalle query del tipo di componente corrispondente: ogni raccolta di entità si aggancia a un evento OnEntityCreate e verifica se corrisponde. Ci sono ancora alcuni bug lì.

La seconda sfida era in realtà la creazione di un "oggetto di gioco": li ho chiamati modelli. Qui probabilmente non sono molto puro secondo le specifiche di T = Machine, ma sembra funzionare. I modelli raggruppano le istanze dei componenti e consentono una composizione dell'entità più semplice (ovvero, la palla è disegnabile e fisica).

Spero che sia utile - i sistemi di entità / componenti possono essere una sfida per superare alcuni degli ostacoli iniziali.


1

Un altro, che non ho usato, ma che ho esaminato un po 'il codice, è Artemis . Ben commentato e abbastanza attivo. Originariamente un framework Java, ma è stato portato su C # / XNA.

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.