1. Système à entités
Qt 3D est entièrement conçu en tant que système à entités (entity-component-system,
d'où l'acronyme ECS), une architecture très courante pour des jeux vidéo. Le principe
de ce patron de conception est de limiter drastiquement l'utilisation de l'héritage dans
un système : d'habitude, chaque élément affiché (par exemple, pour Space Invaders, un
canon, un ennemi) possède des données (position, points de vie, etc.) et un certain
comportement (pour l'affichage, la réaction aux entrées de l'utilisateur, notamment). Au
contraire, avec un système à entités, le comportement est abstrait des données, de telle
sorte qu'il peut être réutilisé sans héritage. Ainsi, on compte quatre types d'éléments :
une entité (QEntity en Python, Entity en QML) identifie un objet du jeu, mais sans
aucun comportement ou donnée (une entité ne sert qu'à agréger des composants).
Par exemple, le canon du joueur et chacun des ennemis sera une entité à part
entière. Une scène contiendra un très grand nombre d'entités, chacune étant une
instance de QEntity ou d'Entity ;
un composant (QComponent en Python, Component3D en QML) se greffe à une
entité pour lui ajouter des données et indiquer au système qu'un certain
comportement s'applique (l'implémentation du comportement étant gérée par un
aspect). Par exemple, être affichable peut être indiqué par un composant (un
canon, un ennemi), émettre un bruit également (pour le canon du joueur). Pour
créer un nouveau composant, il faut hériter de QComponent ou de Component3D ;
un aspect (QAbstractAspect en Python) est l'implémentation d'un comportement
indiqué par un composant. Par exemple, le rendu à l'écran est implémenté comme
un aspect (QRenderAspect) : pour dessiner une image à l'écran, le code de cet
aspect passe en revue toutes les entités et, pour celles qui ont un composant de
rendu, utilise les informations de ce composant pour afficher l'entité
correspondante ;
le système (QAspectEngine en Python) gère les interactions entre ces trois parties,
notamment l'échange de messages lors du changement de valeur d'une propriété
entre les différents composants.
Une application Qt 3D relativement simple n'aura que deux types d'éléments : des
entités et des composants. Si elle est plus complexe, certains comportements devront
être implémentés à l'aide d'aspects (ce qui ne peut pas se faire en JavaScript). Le
système, quant à lui, est instancié lors de la création de la fenêtre Qt 3D.
451
Précédent

- 452/494

Suivant