J'essaie de me familiariser avec la conception d'entités basée sur les composants.
Ma première étape a été de créer divers composants pouvant être ajoutés à un objet. Pour chaque type de composant, j'avais un gestionnaire, qui appelait la fonction de mise à jour de chaque composant, transmettant des choses comme l'état du clavier, etc., au besoin.
La prochaine chose que j'ai faite a été de supprimer l'objet et de simplement avoir chaque composant avec un ID. Un objet est donc défini par des composants ayant les mêmes identifiants.
Maintenant, je pense que je n'ai pas besoin d'un gestionnaire pour tous mes composants, par exemple j'ai un SizeComponent
, qui a juste une Size
propriété). Par conséquent, le SizeComponent
n'a pas de méthode de mise à jour et la méthode de mise à jour du gestionnaire ne fait rien.
Ma première pensée a été d'avoir une ObjectProperty
classe sur laquelle les composants pourraient interroger, au lieu de les avoir comme propriétés de composants. Un objet aurait donc un certain nombre de ObjectProperty
et ObjectComponent
. Les composants auraient une logique de mise à jour qui interroge l'objet pour les propriétés. Le gestionnaire gérerait l'appel de la méthode de mise à jour du composant.
Cela me semble être une ingénierie excessive, mais je ne pense pas pouvoir me débarrasser des composants, car j'ai besoin d'un moyen pour les gestionnaires de savoir quels objets ont besoin de la logique du composant à exécuter (sinon je supprimerais simplement le composant complètement et pousser sa logique de mise à jour dans le gestionnaire).
- Est - ce (ayant
ObjectProperty
,ObjectComponent
etComponentManager
cours) sur l' ingénierie? - Quelle serait une bonne alternative?
RenderingComponent
et a PhysicsComponent
. Suis-je en train de réfléchir à la décision de mettre la propriété? Dois-je simplement le coller dans l'un ou l'autre, puis demander à l'autre de rechercher un objet pour le composant qui a la propriété requise?
PhysicalStateInstance
(un par objet) à côté d'un GravityPhysicsShared
(un par jeu); Cependant, je suis tenté de dire que cela s'aventure dans le domaine de l'euphorie des architectes, ne vous architectez pas dans un trou (exactement ce que j'ai fait avec mon premier système de composants). BAISER.
SizeComponent
est exagéré - vous pouvez supposer que la plupart des objets ont une taille - ce sont des choses comme le rendu, l'IA et la physique où le modèle de composant est utilisé; La taille se comportera toujours de la même manière, vous pouvez donc partager ce code.