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 Sizepropriété). Par conséquent, le SizeComponentn'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 ObjectPropertyclasse 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 ObjectPropertyet 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,ObjectComponentetComponentManagercours) sur l' ingénierie? - Quelle serait une bonne alternative?
RenderingComponentet 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.

SizeComponentest 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.