Je crée un système d'objets de jeu basé sur des composants . Quelques conseils:
GameObjectest simplement une liste deComponents.- Il y en a
GameSubsystems. Par exemple, le rendu, la physique, etc. ChacunGameSubsystemcontient des pointeurs vers certainsComponents.GameSubsystemest une abstraction très puissante et flexible: elle représente n'importe quelle tranche (ou aspect) du monde du jeu.
Il est nécessaire dans un mécanisme d'enregistrement Componentsen GameSubsystems(quand GameObjectest créé et composé). Il existe 4 approches :
- 1: Modèle de chaîne de responsabilité . Tout
Componentest offert à tousGameSubsystem.GameSubsystemprend la décisionComponentsde s'inscrire (et comment les organiser). Par exemple, GameSubsystemRender peut enregistrer des composants pouvant être rendus.
pro. Componentsne savent pas comment ils sont utilisés. Couplage bas. A. Nous pouvons en ajouter de nouveaux GameSubsystem. Par exemple, ajoutons GameSubsystemTitles qui enregistre tous les ComponentTitle et garantit que chaque titre est unique et fournit une interface pour interroger des objets par titre. Bien sûr, ComponentTitle ne doit pas être réécrit ou hérité dans ce cas. B. Nous pouvons réorganiser l'existant GameSubsystems. Par exemple, GameSubsystemAudio, GameSubsystemRender, GameSubsystemParticleEmmiter peuvent être fusionnés dans GameSubsystemSpatial (pour placer tous les fichiers audio, emmiter, restituer Componentsdans la même hiérarchie et utiliser des transformations relatives aux parents).
con. Chèque de chaque à chaque. Très inefficace.
con. Subsystemssavoir Components.
- 2: Chacun
SubsystemrechercheComponentsdes types spécifiques.
pro. De meilleures performances qu'en Approach 1.
con. Subsystemssavoir encore Components.
- 3:
Components'enregistre dansGameSubsystem(s). Nous savons au moment de la compilation qu'il existe un GameSubsystemRenderer, nous allons donc appeler ComponentImageRender quelque chose comme GameSubsystemRenderer :: register (ComponentRenderBase *).
pro. Performance. Pas de contrôles inutiles comme dans Approach 1.
con. Componentssont mal couplés avec GameSubsystems.
- 4: Motif médiateur .
GameState(qui contientGameSubsystems) peut implémenter registerComponent (Component *).
pro. Componentset GameSubystemsne savent rien les uns des autres.
con. En C ++, cela ressemblerait à un commutateur de typeid laid et lent.
Questions:
Quelle approche est la meilleure et la plus utilisée dans la conception basée sur les composants? Quelle pratique dit? Des suggestions sur la mise en œuvre de Approach 4?
Je vous remercie.
Componentsen GameObjectsest hors de portée de ma question. Lisez des articles sur l'approche basée sur les composants ou posez votre propre question sur ce site si cela vous intéresse. Ce à quoi vous pensez GameSubsystemest totalement faux.