Risposte:
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.
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.
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.
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.