J'essaie de concevoir un système d'entité basé sur des composants à des fins d'apprentissage (et plus tard pour certains jeux) et j'ai des problèmes pour mettre à jour les états d'entité.
Je ne veux pas avoir de méthode update () dans le composant pour éviter les dépendances entre les composants.
Ce que je pense actuellement, c'est que les composants contiennent des données et des composants de mise à jour des systèmes.
Donc, si j'ai un jeu 2D simple avec certaines entités (par exemple, joueur, ennemi1, ennemi2) qui ont des composants Transformation, Mouvement, État, Animation et Rendu, je pense que je devrais avoir:
- Un MovementSystem qui déplace tous les composants Movement et met à jour les composants State
- Et un RenderSystem qui met à jour les composants d'animation (le composant d'animation doit avoir une animation (c'est-à-dire un ensemble d'images / textures) pour chaque état et la mettre à jour signifie sélectionner l'animation correspondant à l'état actuel (par exemple, saut, déplacement_gauche, etc.), et mise à jour de l'index de trame). Ensuite, le système de rendu met à jour les composants de rendu avec la texture correspondant à l'image actuelle de l'animation de chaque entité et rend tout à l'écran.
J'ai vu quelques implémentations comme le framework Artemis, mais je ne sais pas comment résoudre cette situation:
Disons que mon jeu a les entités suivantes. Chaque entité a un ensemble d'états et une animation pour chaque état:
- joueur: "idle", "moving_right", "jumping"
- ennemi1: "moving_up", "moving_down"
- ennemi2: "moving_left", "moving_right"
Quelles sont les approches les plus acceptées pour mettre à jour l'état actuel de chaque entité? La seule chose à laquelle je peux penser est d'avoir des systèmes séparés pour chaque groupe d'entités et des composants State et Animation séparés, donc j'aurais PlayerState, PlayerAnimation, Enemy1State, Enemy1Animation ... PlayerMovementSystem, PlayerRenderingSystem ... mais je pense que c'est une mauvaise solution et brise le but d'avoir un système basé sur les composants.
Comme vous pouvez le voir, je suis assez perdu ici, donc j'apprécierais beaucoup toute aide.
EDIT: Je pense que la solution pour faire fonctionner ce que je veux est celle-ci:
Vous créez des composants statecoment et animationcomponent suffisamment génériques pour être utilisés pour toutes les entités. Les données qu'ils contiennent seront le modificateur pour changer des choses comme les animations qui sont jouées ou les états disponibles. - Byte56
Maintenant, j'essaie de comprendre comment concevoir ces 2 composants suffisamment génériques pour pouvoir les réutiliser. Pourrait avoir un UID pour chaque état (par exemple marcher, courir ...) et stocker des animations dans une carte dans le composant d'animation composé par cet identifiant serait une bonne solution?
statecomponent
et animationcomponent
assez générique pour être utilisé pour toutes les entités. Les données qu'ils contiennent seront le modificateur pour changer des choses comme les animations qui sont jouées ou les états disponibles.