J'ai lu des informations sur les cadres du système d'entité, en particulier Artemis. J'essaie de décider si c'est bon pour moi. Je travaille strictement sur des jeux de pixel art 2D basés sur des tuiles, et je ne pense pas qu'ils seront jamais aussi gourmands en ressources. J'ai toujours utilisé la POO standard avec beaucoup d'héritage dans le passé.
Ma compréhension du Entity System Framework en ce moment (je ne sais pas si je le sais complètement) est:
- Les entités ne sont que des identifiants
- Les composants ne sont que des données stupides ajoutées à un pool de composants d'entités
- Les systèmes sont des fonctions de mise à jour qui sont attachées au monde pour gérer chaque entité qui correspond à la signature du composant Systems
Si ma compréhension est correcte, j'ai un peu de mal à conceptualiser l'ajout de tilemaps et d'arbres comportementaux AI dans ce cadre. Je vais poser des questions sur l'IA à l'avenir.
Un tilemap doit-il être intégré à ce cadre? Ou doit-il être séparé pour le rendre facile à générer avec un éditeur de tilemap?
Si le tilemap doit être intégré à ce cadre, chaque tuile est-elle une entité différente? Et le tilmap un système? Ou le tilemap lui-même est-il une entité unique dont l'héritage est construit à partir de lui?
Si le tilemap est spéré, quel serait le meilleur moyen de détecter les collisions avec le tilemap externe?
Je comprends que plusieurs options que j'ai énumérées pourraient être correctes, mais si quelqu'un l'a fait dans le passé, il pourrait être en mesure de faire la lumière sur ma confusion. Peut-être y a-t-il une autre alternative à laquelle je n'ai pas pensé?
Je vous remercie.
la source
Réponses:
J'ai implémenté un framework de composants d'entité (similaire à Artemis) après avoir déjà été en développement pendant un certain temps, mais je ne pense pas que j'aurais fait les choses différemment si je partais d'une liste vierge.
J'ai mon monde totalement séparé du cadre d'entité. Cela n'avait tout simplement pas de sens pour moi de convertir le monde en une sorte d'entité ou de collection d'entités. Mon monde est en 3D avec des cubes, mais je pense que c'est la même chose pour les tuiles. Les entités constituent tout le reste du monde, mais le terrain est séparé. Cependant, lorsque des cubes sont supprimés, ils engendrent des entités "matérielles".
La détection de collision n'est pas trop difficile à relier. Votre monde aurait probablement des
isSolidAt(x,y)
méthodes de type que votre système de collision utilisera. Honnêtement, je l'ai déjà dit aujourd'hui dans une réponse différente , faites ce qui vous semble le plus logique. Vous n'enfreignez aucune règle en séparant la carte de tuiles ou en en faisant une entité. Tout ce que vous pouvez envelopper, c'est ce qui est le mieux. Pour moi, c'était garder le monde séparé et faire de tout le reste des entités.la source
isSolidAt
?J'ai ajouté tilemap en tant que composant distinct à l'entité (avec toutes les tuiles à l'intérieur) et il y a aussi un moteur de rendu séparé pour la carte des tuiles, donc je peux le rendre en 3D ou en 2D. Créer toutes les tuiles en tant qu'entités est possible mais trop cher.
quelque chose comme ca:
l'avantage de séparer le dessin de la logique est l'idée de base du modèle MVC
la source