Le paradigme de programmation de jeux basé sur les composants devient de plus en plus populaire. Je me demandais, y a-t-il des projets qui offrent un cadre de composants réutilisable? Dans n'importe quelle langue, je suppose que je m'en fous. Ce n'est pas pour mon propre projet, je suis juste curieux.
Plus précisément, je veux dire qu'il existe des projets qui incluent une Entity
classe de base , une Component
classe de base et peut-être certains composants standard? Il serait alors beaucoup plus facile de démarrer un jeu si vous ne vouliez pas réinventer la roue, ou peut-être que vous voulez un GraphicsComponent
qui fait des sprites avec Direct3D, mais vous pensez que cela a déjà été fait une douzaine de fois.
Une recherche rapide sur Google révèle Rusher . Est-ce que quelqu'un en a entendu parler / est-ce que quelqu'un l'utilise? S'il n'y en a pas, alors pourquoi pas? Est-il trop difficile de rendre quelque chose comme ça réutilisable, et ils ont besoin d'une forte personnalisation? Dans ma propre implémentation, j'ai trouvé beaucoup de passe-partout qui pourraient être insérés dans un framework.
la source
Réponses:
Parce qu'il n'y a rien qui ressemble à un consensus sur la façon dont un tel cadre fonctionnerait.
Sur un fil sur Gamedev.net, j'ai déterminé que lorsque les gens parlent de systèmes de jeu basés sur des composants, il y a en fait au moins 8 permutations possibles de la façon dont ils s'attendent à ce qu'ils fonctionnent, en fonction de 3 facteurs différents:
Inboard vs outboard - les composants doivent-ils être agrégés en une entité, ou doivent-ils faire partie d'un sous-système et être uniquement associés par un ID d'entité?
Composition statique vs composition dynamique - si les entités sont constituées d'un ensemble connu de composants (par exemple, 1 physique, 1 animation, 1 IA, etc.) qui peuvent communiquer en code via des interfaces bien connues, ou les entités peuvent-elles avoir des quantités arbitraires de composants ajoutées à eux (avec des stratégies associées pour localiser d'autres composants d'intérêt)
Données sur le composant vs données sur l'entité - Les données doivent-elles être détenues par le composant qui les exploite principalement? Ou les données doivent-elles être stockées sur l'entité dans un espace partagé, accessible par tous les composants?
Au-delà de cela, il y a d'autres questions sur la façon dont les composants doivent communiquer (via les données partagées? Via des pointeurs de fonction? Via des signaux / emplacements? Ou pas du tout?), Comment ils doivent être mis à jour (dans un ordre fixe en fonction du type de composant? Un par d'ordre des entités défini au moment de la création? basé sur une sorte topologique d'interdépendances de composants?), etc.
Chacun de ces choix est complètement arbitraire, et tout ce que vous pouvez faire avec un système peut être fait avec l'autre. Mais la façon dont vous devez le coder est très différente dans chaque cas. Et les gens semblent avoir des opinions bien arrêtées sur la voie qui leur convient le mieux.
À l'heure actuelle, les gens sont encore trop pris dans l'idée que les composants remplacent en quelque sorte l'orientation des objets (ce qu'ils ne sont pas) et s'imaginent également qu'ils constituent un changement radical par rapport à la façon dont les jeux étaient traditionnellement fabriqués (ce qui, encore une fois, ils n'étaient pas - les gens ont pris en compte les différents sous-systèmes dans leurs entités pendant des âges), donc il y a beaucoup d'hyperbole et pas beaucoup d'accord. Peut-être que dans quelques années les choses se seront calmées et que les gens adopteront une ou deux approches assez standard.
la source
Il y a un wiki qui rassemble des exemples de tout cela:
http://entity-systems.wikidot.com/
... ainsi que des explications sur les différences entre les différentes approches.
la source
Vérifiez ces cadres que j'ai découvert concernant cette architecture ...
www.burgerengine.com
PushButtonEngine
Cadre Arthemis - https://github.com/artemis-esf/artemis-framework/tree/master/src/com/artemis
Jetez un œil à Unity Api. Vous pouvez trouver beaucoup de choses concernant l'architecture basée sur les composants. (Mettra à jour la liste dès que je trouverai plus ...)
Mise à jour:
Cela explique les systèmes d'entités dans le bon sens ... http://piemaster.net/2011/07/entity-component-primer/
la source
Il existe un moteur à bouton-poussoir pour Flash: http://pushbuttonengine.com/
Et il y a Panda3D pour c ++ / python: panda3d dot com (désolé, je n'ai droit qu'à 1 URL par message en tant que n00b)
Je suis sûr qu'il y en a des tonnes de plus :)
la source