Sto cercando di orientarmi nella progettazione di entità basata su componenti.
Il mio primo passo è stato quello di creare vari componenti che potevano essere aggiunti a un oggetto. Per ogni tipo di componente avevo un manager, che chiamava la funzione di aggiornamento di ogni componente, passando cose come lo stato della tastiera ecc. Come richiesto.
La prossima cosa che ho fatto è stato rimuovere l'oggetto e avere solo ogni componente con un ID. Quindi un oggetto è definito da componenti con gli stessi ID.
Ora, sto pensando che non ho bisogno di un manager per tutti i miei componenti, ad esempio ho un SizeComponent
, che ha solo una Size
proprietà). Di conseguenza il SizeComponent
non ha un metodo di aggiornamento e il metodo di aggiornamento del gestore non fa nulla.
Il mio primo pensiero era di avere una ObjectProperty
classe su cui i componenti potevano interrogare, invece di averli come proprietà dei componenti. Quindi un oggetto avrebbe un numero di ObjectProperty
eObjectComponent
. I componenti avrebbero una logica di aggiornamento che richiede l'oggetto per le proprietà. Il gestore riuscirà a chiamare il metodo di aggiornamento del componente.
Questo mi sembra troppo ingegneristico, ma non credo di poter eliminare i componenti, perché ho bisogno di un modo per i gestori di sapere quali oggetti necessitano di quale logica del componente eseguire (altrimenti rimuoverei semplicemente il componente completamente e inserire la sua logica di aggiornamento nel gestore).
- È questo (avendo
ObjectProperty
,ObjectComponent
eComponentManager
classi) over-engineering? - Quale sarebbe una buona alternativa?
RenderingComponent
e a PhysicsComponent
. Sto pensando troppo a dove mettere la proprietà? Devo solo attaccarlo in entrambi, quindi l'altra query deve un oggetto per il componente che ha la proprietà necessaria?
PhysicalStateInstance
(uno per oggetto) insieme a GravityPhysicsShared
(uno per gioco); tuttavia sono tentato di dire che questo si sta avventurando nei regni dell'euforia degli architetti, non progettare te stesso in un buco (esattamente quello che ho fatto con il mio primo sistema componente). BACIO.
SizeComponent
sia eccessivo - puoi presumere che la maggior parte degli oggetti abbia una dimensione - sono cose come il rendering, l'intelligenza artificiale e la fisica in cui viene utilizzato il modello componente; Le dimensioni si comporteranno sempre allo stesso modo, quindi puoi condividere quel codice.