Je pense que j'ai déjà eu l'idée du Entity System inspiré par Adam Martin (t-machine). Je veux commencer à l'utiliser pour mon prochain projet.
Je connais déjà les bases de l'entité, des composants et des systèmes. Mon problème est de savoir comment gérer l'interface utilisateur / HUD. Par exemple, une fenêtre de quête, une fenêtre de compétence, une fenêtre d'informations sur les personnages, etc. Comment gérez-vous les événements de l'interface utilisateur (par exemple en appuyant sur un bouton)? Ce sont des choses qui n'ont pas besoin d'être traitées à chaque image. Actuellement, j'utilise MVC pour coder l'interface utilisateur, mais je ne pense pas que ce sera compatible pour Entity System.
J'ai lu qu'Entity System est intégré à un POO plus grand. Je ne sais pas si l'interface utilisateur est en dehors d'ES ou non. Comment aborder celui-ci?
la source
Bien que je pense qu'une interface utilisateur d'entité / composant pourrait fonctionner, il serait difficile de le faire. De plus, il est suffisamment éloigné des composants et des systèmes que vous auriez pour traiter vos entités de jeu, il s'agirait essentiellement d'un autre système d' entités / composants dans votre jeu. Je ne peux pas imaginer qu'il y aurait beaucoup de chevauchement entre les deux.
Les systèmes d'entités sont impressionnants et il peut être tentant de les utiliser partout. Après tout, lorsque vous obtenez un marteau vraiment doux, vous êtes tenté de traiter tous vos problèmes comme des ongles. Cependant, le système EC n'est qu'un autre outil dans votre sac de programmation. Pour les problèmes qu'il est utilisé pour résoudre, cela fonctionne très bien, mais vous disposez de meilleurs outils pour des problèmes comme l'interface utilisateur.
La structure d'héritage fonctionne très bien pour les interfaces graphiques. Non seulement pour créer les composants de l'interface utilisateur, mais aussi pour les disposer. C'est vraiment agréable de pouvoir faire en sorte que les composants de l'interface utilisateur soient des enfants d'autres composants afin qu'ils puissent hériter de propriétés telles que la position, l'échelle et l'opacité. Si vous essayez de mettre cela en place avec un système EC, vous devrez enfreindre certaines règles du système EC.
la source
Vous pouvez créer une nouvelle fonction d'interface qui est appelée chaque fois que l'interface utilisateur / HUD est dessinée et autoriser les composants personnalisés / scriptés à implémenter cette fonction. Cela nécessite un système IMGUI (il y a beaucoup de tutoriels sur Google, c'est juste la présentation originale) pour être utilisé. Avec cela, vous pouvez créer des fenêtres en tant qu'entités à l'intérieur desquelles vous aurez votre propre composant de construction d'interface utilisateur et un composant de rendu de cadre de fenêtre.
Quant à ne pas traiter tout cela à chaque image, vous pouvez rendre toute l'interface utilisateur dans un tampon différent que vous ne mettrez à jour que sur toutes sortes d'événements d'entrée / de données. Autrement dit, chaque fois qu'un événement est reçu, il change une variable pour indiquer que la fenêtre doit être repeinte la trame suivante. Si cette variable est vraie, elle est alors définie sur false et les interfaces UI sont appelées après cela. Si vous voulez des animations, il est important que vous utilisiez cet ordre exact des opérations afin que l'interface utilisateur elle-même puisse déclencher une repeinture pour la prochaine image.
la source