Après avoir posé deux questions sur les systèmes d'entités ( 1 , 2 ), et lu quelques articles à leur sujet, je pense que je les comprends beaucoup mieux qu'avant. J'ai encore quelques incertitudes, principalement sur la construction d'un émetteur de particules, d'un système d'entrée et d'une caméra. J'ai évidemment encore des problèmes pour comprendre les systèmes d'entités, et ils peuvent s'appliquer à une toute autre gamme d'objets, mais j'ai choisi ces trois parce qu'ils sont des concepts très différents, devraient couvrir un terrain assez large et m'aider à comprendre les systèmes d'entités et comment gérer des problèmes comme ceux-ci, moi-même, au fur et à mesure qu'ils surviennent.
Je construis un moteur en JavaScript, et j'ai implémenté la plupart des fonctionnalités de base, qui comprennent: la gestion des entrées, un système d'animation flexible, un émetteur de particules, des classes et des fonctions mathématiques, la gestion des scènes, une caméra et un rendu, et tout un tas d'autres choses que les moteurs prennent généralement en charge. J'ai lu la réponse de Byte56, qui m'a intéressé à faire du moteur un système d'entités. Il resterait toujours un moteur de jeu HTML5, avec la philosophie de base de la scène, mais il devrait prendre en charge la création dynamique d'entités à partir de composants.
Le problème que j'ai, maintenant, est d'adapter mon ancien concept de moteur à ce nouveau paradigme de programmation. Voici quelques définitions des questions précédentes, mises à jour:
Une entité est un identifiant. Il n'a pas de données, ce n'est pas un objet, c'est un simple identifiant qui représente un index dans la liste des scènes de toutes les entités (que j'ai l'intention de mettre en œuvre en tant que matrice de composants).
Un composant est un détenteur de données, mais avec des méthodes qui peuvent fonctionner sur ces données. Le meilleur exemple est un
Vector2D
ou un composant "Position". Il a des données:x
ety
, mais aussi des méthodes qui permettent de manipuler les données sur un peu plus facile:add()
,normalize()
et ainsi de suite.Un système est quelque chose qui peut fonctionner sur un ensemble d'entités qui répondent à certaines exigences; généralement, les entités doivent avoir un ensemble spécifié de composants, pour être exploitées. Le système est la partie "logique", la partie "algorithme", toutes les fonctionnalités fournies par les composants sont purement pour une gestion des données plus simple.
Caméra
La caméra possède une Vector2D
propriété de position, une propriété de rotation et quelques méthodes pour la centrer autour d'un point. Chaque image, elle est alimentée dans un moteur de rendu, avec une scène, et tous les objets sont traduits en fonction de sa position. La scène est ensuite rendue.
Comment pourrais-je représenter ce type d'objet dans un système d'entités? La caméra serait-elle une entité, un composant ou une combinaison (selon ma réponse )?
Emetteur de particules
Le problème que j'ai avec mon émetteur de particules est, encore une fois, ce qui devrait être quoi. Je suis à peu près sûr que les particules elles-mêmes ne devraient pas être des entités, car je veux en prendre en charge plus de 10 000, et je pense que créer autant d'entités serait un coup dur pour mes performances.
Comment pourrais-je représenter ce type d'objet dans un système d'entités?
Gestionnaire d'entrées
Le dernier dont je veux parler est de savoir comment gérer les entrées. Dans ma version actuelle du moteur, il existe une classe appelée Input
. Il s'agit d'un gestionnaire qui s'abonne aux événements du navigateur, tels que les pressions sur les touches et les changements de position de la souris, et maintient également un état interne. Ensuite, la classe player possède une react()
méthode, qui accepte un objet d'entrée comme argument. L'avantage de ceci est que l'objet d'entrée pourrait être sérialisé en .JSON, puis partagé sur le réseau, permettant des simulations multijoueurs fluides.
Comment cela se traduit-il en un système d'entités?