Je me suis penché sur la conception du moteur de jeu (en particulier sur les moteurs de jeu 2D, mais également sur les jeux 3D) et je suis intéressé par certaines informations sur la manière de procéder. J’ai entendu dire que de nombreux moteurs évoluent aujourd’hui vers une conception basée sur les composants plutôt que vers la hiérarchie traditionnelle des objects profonds.
Connaissez-vous de bons liens avec des informations sur la façon dont ces types de modèles sont souvent mis en œuvre? J’ai vu évoluer votre hiérarchie , mais je ne peux pas vraiment en trouver plus avec des informations détaillées (la plupart d’entre eux semblent simplement dire «utiliser des composants plutôt qu’une hiérarchie», mais j’ai trouvé qu’il fallait un peu d’effort pour changer de pensée) entre les deux modèles).
Tous les bons liens ou informations à ce sujet seraient appréciés, et même des livres, bien que des liens et des réponses détaillées soient préférables.
Mise à jour 2013-01-07 : Si vous voulez voir un bon mélange de moteur de jeu basé sur des composants avec une approche (à mon avis) supérieure de programmation réactive, jetez un oeil au moteur V-Play . Il intègre très bien la fonctionnalité de liaison de propriétés QMLs QT.
Nous avons fait des recherches sur CBSE dans les jeux de notre université et j’ai collecté du matériel au fil des ans:
CBSE dans la littérature de jeux:
Le framework de jeu Elephant est un très bon exemple de moteur de jeu basé sur des composants en C #.
Si vous voulez vraiment savoir quels composants sont lus: Génie logiciel basé sur les composants! Ils définissent un composant comme:
Un composant logiciel est un élément logiciel conforme à un modèle de composant et pouvant être déployé et composé indépendamment sans modification selon une norme de composition.
Un modèle de composant définit des normes d’ interaction et de composition spécifiques . Une implémentation de modèle de composant est l’ensemble dédié d’éléments logiciels exécutables requirejs pour prendre en charge l’exécution de composants conformes au modèle.
Une infrastructure de composants logiciels est un ensemble de composants logiciels interactifs conçus pour garantir qu’un système logiciel ou un sous-système construit à l’aide de ces composants et interfaces répondra à des spécifications de performance clairement définies.
Après 2 ans d’expérience avec CBSE dans les jeux, j’ai pensé que la programmation orientée object était simplement une impasse. Souvenez-vous de mon avertissement lorsque vous regardez vos composants devenir de plus en plus petits, et plus comme des fonctions empaquetées dans des composants avec beaucoup de frais inutiles. Utilisez plutôt la programmation à réactivité fonctionnelle . Jetez également un coup d’œil à mon nouveau billet de blog (qui m’a amené à poser cette question tout en l’écrivant :)) à propos de Pourquoi je suis passé de l’architecture de moteur de jeu basée sur les composants à l’architecture FRP .
CBSE dans les journaux de jeux:
CBSE dans les liens de jeux (sortingés par pertinence):
Il semble y avoir un manque d’informations sur le sujet. J’ai récemment implémenté ce système et j’ai trouvé un très bon Powerpoint GDC qui expliquait les détails qui sont souvent laissés pour compte. Ce document est ici: Théorie et pratique de l’architecture des composants d’objects de jeu
En plus de ce Powerpoint, il existe de bonnes ressources et divers blogs . PurplePwny a une bonne discussion et des liens vers d’autres ressources. Ugly Baby Studios discute un peu de l’interaction des composants entre eux. Bonne chance!
Bien qu’il ne s’agisse pas d’un didacticiel complet sur la conception des moteurs de jeux, j’ai trouvé que cette page contient de nombreux détails et exemples sur l’utilisation de l’architecture des composants pour les jeux.
Il est open-source et disponible sur http://codeplex.com/elephant
Quelqu’un a fait un exemple de travail du code gpg6, vous pouvez le trouver ici: http://www.unseen-academy.de/componentSystem.html
ou ici: http://www.mcshaffry.com/GameCode/thread.php?threadid=732
Cordialement
Je suis actuellement à la recherche de ce sujet dans les nombreux (BEAUCOUP) sujets sur GameDev.net et j’ai trouvé les deux solutions suivantes pour être de bons candidats sur ce que je développerai pour mon jeu:
J’ai recherché et mis en œuvre ce dernier semestre pour un cours de développement de jeux. J’espère que cet exemple de code peut vous orienter dans la bonne direction.
class Entity { public: Entity(const unsigned int id, const std::ssortingng& enttype); ~Entity(); //Component Interface const Component* GetComponent(const std::ssortingng& family) const; void SetComponent(Component* newComp); void RemoveComponent(const std::ssortingng& family); void ClearComponents(); //Property Interface bool HasProperty(const std::ssortingng& propName) const; template T& GetPropertyDataPtr(const std::ssortingng& propName); template const T& GetPropertyDataPtr(const std::ssortingng& propName) const; //Entity Interface const unsigned int GetID() const; void Update(float dt); private: void RemoveProperty(const std::ssortingng& propName); void ClearProperties(); template void AddProperty(const std::ssortingng& propName); template Property* GetProperty(const std::ssortingng& propName); template const Property* GetProperty(const std::ssortingng& propName) const; unsigned int m_Id; std::map m_Properties; std::map m_Components; };
Les composants spécifient le comportement et opèrent sur les propriétés. Les propriétés sont partagées entre tous les composants par une référence et obtiennent des mises à jour gratuitement. Cela signifie qu’il n’y a pas de gros frais pour le passage des messages. S’il y a des questions, je vais essayer de répondre du mieux que je peux.
Dans ce contexte, les composants me semblent être des parties d’exécution isolées d’un moteur pouvant s’exécuter simultanément avec d’autres composants. Si c’est la motivation, alors vous pourriez vouloir regarder le modèle d’acteur et les systèmes qui l’utilisent.
Artcle intéressant …
J’ai fait une recherche rapide sur Google et je n’ai rien trouvé, mais vous voudrez peut-être vérifier certains commentaires – beaucoup de personnes semblent avoir essayé d’implémenter une démo de composants simples, vous devriez peut-être jeter un coup d’œil à certains commentaires. du leur pour l’inspiration:
http://www.unseen-academy.de/componentSystem.html
http://www.mcshaffry.com/GameCode/thread.php?threadid=732
http://www.codeplex.com/Wikipage?ProjectName=elephant
De plus, les commentaires eux-mêmes semblent avoir une discussion assez approfondie sur la manière dont vous pourriez coder un tel système.