Je crée un système d'objets de jeu basé sur des composants . Quelques conseils:
GameObject
est simplement une liste deComponents
.- Il y en a
GameSubsystems
. Par exemple, le rendu, la physique, etc. ChacunGameSubsystem
contient des pointeurs vers certainsComponents
.GameSubsystem
est 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 Components
en GameSubsystems
(quand GameObject
est créé et composé). Il existe 4 approches :
- 1: Modèle de chaîne de responsabilité . Tout
Component
est offert à tousGameSubsystem
.GameSubsystem
prend la décisionComponents
de s'inscrire (et comment les organiser). Par exemple, GameSubsystemRender peut enregistrer des composants pouvant être rendus.
pro. Components
ne 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 Components
dans la même hiérarchie et utiliser des transformations relatives aux parents).
con. Chèque de chaque à chaque. Très inefficace.
con. Subsystems
savoir Components
.
- 2: Chacun
Subsystem
rechercheComponents
des types spécifiques.
pro. De meilleures performances qu'en Approach 1
.
con. Subsystems
savoir encore Components
.
- 3:
Component
s'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. Components
sont mal couplés avec GameSubsystems
.
- 4: Motif médiateur .
GameState
(qui contientGameSubsystems
) peut implémenter registerComponent (Component *).
pro. Components
et GameSubystems
ne 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.
Components
en GameObjects
est 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 GameSubsystem
est totalement faux.