Construction de l’Entity Component System

Actuellement on est devant plusieurs problématiques, comment construire des entités configurables à souhait ? Comment intégrer des fonctionnalités aussi simplement qu’en ajoutant une configuration ? D’ailleurs comment ajouter ou retirer une fonctionnalité d’une entité en jeu ? Comment rendre une entité polymorphe ?

Les Component ou Composants sont la réponse et en fait tout le pattern Entity Component System est la réponse.
Le fonctionnement est simple, une Entity au départ doit être un objet vide auquel on va lui coller des Components pour lui donner des fonctionnalités via les Systems
Par exemple on voudrait dessiner un Rectangle Rouge, de grandeur 50×50, à une position x -> 5 et y -> 5 et on voudrait qu’il bouge dans une certaine direction. Tout ça est composable avec :

  • Composant Size : qui donne une hauteur et une largeur
  • Composant Position : qui donne deux points x et y pour une position sur le plan 2D, on pourrait rajouter un point Z pour rendre la position 3D
  • Composant RenderRectangle : qui comprend une configuration concernant sa couleur et pourquoi pas une donnée sur une éventuelle bordure (on pourrait aussi en faire un composant).
  • Composant Speed: donne deux points x et y pour exprimer une vitesse par seconde sur l’axe X et l’axe Y.

Tous ces composants inclus dans l’entité seront analysés et seront utilisés par les systèmes qui en ont besoin. Par exemple, le composant Speed pourrait être utilisé par un Move System qui serait fait pour mouvoir l’entité dans le plan. Le Pattern ECS donne vraiment BEAUCOUP de possibilités !

Lire l’article en entier

La Boucle d’Animation (partie 2)

On l’a vu, la boucle d’animation nous permet d’animer nos scènes et d’exploiter nos entités en mettant à jours leurs données.
Evidemment, dans un soucis d’organisation on est obligé d’intégrer tout ça dans une classe qui nous permettra, entre autre, de gérer la boucle ne fut-ce que pour lui adjoindre des méthodes de lancement et d’arrêt (vous verrez que pendant le dev d’un jeu, avoir ces deux méthodes c’est assez utile pour tracker les bugs).

Cela va impliquer pas mal changement dans nos différentes parties de code, en effet notre moteur actuellement ne gère que les entités de type rectangle et franchement ce serait pas mal qu’on puisse faire évoluer tout ça. Sans oublier évidemment que pour l’instant, le déplacement d’une entité par exemple on doit le gérer à la main. On va donc reprendre tout ce qu’on a fait jusqu’à présent, du Resource System à la Boucle d’Animation. Si vous n’avez pas encore lu les articles précédent, je vous invite à le faire.

Lire l’article en entier

Des Entités à la Scène (Partie 2)

Dans la partie précédente, nous avons vu comment créer et gérer des Entités, maintenant, dans cette deuxième partie nous allons voir comment intégrer tout ça dans une scène et gérer plusieurs scènes en même temps.

Une Scene est donc un objet possédant un manager d’entités, son rôle est d’être un accès à ce manager et doit pouvoir également être mis en différentes couche avec d’autres scène via un SceneManager (qu’on codera plus bas).

La Scene étant utilisée comme couche de dessin, on doit pouvoir la contrôler en lui définissant un état, qu’elle soit visible ou non selon nos besoin. Prenons l’exemple d’un menu de jeu. Quand vous êtes en jeu et que vous appuyez sur la touche échappe en général un menu apparaît.
Parfois même on peut voir le jeu continuer à tourner en arrière plan, c’est ce que la scène permet, entre autre, de faire.

Lire l’article en entier

Des Entités à la Scène (partie 1)

Scène de théâtre, par Pietro Longhi (vers 1780) – Wikipédia.

Quand on regarde une image, ou plus précisément un dessin, une photo, une peinture, on y voit toujours l’expression de quelque chose. Un sentiment, une explication logique, un moment, des émotions, etc…
En général l’artiste place ses éléments sur sa scène et cherche à montrer et exprimer quelque chose. Le peintre ou le dessinateur créeront des personnages dans une posture précises, employant des couleurs et/ou des formes choisies précisément, un photographe attendra le bon moment, la bonne expression ou choisira un angle de vue bien précis pour laisser apparaître ce qu’il veut montrer ou exprimer.

Placer et montrer des éléments, montrer des expressions, des couleurs, des formes, parler au spectateur pour transmettre une information, voilà ce qu’est une scène pour moi.

Dans notre cas, notre toile c’est Canvas, notre scène sera une classe Scene et ses éléments seront des entités rassemblées dans un tableau.

Lire l’article en entier

Gérer les ressources du moteur 2D

Je le disais dans mon précédent article, lorsque le moteur grandi il devient important de savoir quand exécuter certaine tâche et définir des priorités.
Et donc pour ça il faut pouvoir dire où et quand on veut charger des ressources.

L’exemple de l’image est parfait, une image peut être volumineuse, par exemple parce qu’elle contient toutes les frames d’animation de tous les personnages du jeu, ou qu’elle contient toutes les images des éléments statiques du jeu. Le temps du chargement sera forcément dépassé par la vitesse d’exécution de votre code, au final l’image ne sera pas affichée.

On va donc créer un système qui nous permettra de prendre les ressources en mains quand on le voudra.

Lire l’article en entier

Dessiner avec l’API Canvas

Avant de commencer à dessiner, parlons un peu de la grille de pixels. Son point d’origine se trouve sur le coin supérieur gauche de l’écran. La hauteur de l’écran est l’axe des Y et sa largeur est l’axe des X.
A savoir également, l’axe des Y est inversé, le positif est vers le bas et le négatif vers le haut, ça peut paraître contre intuitif et mènera certainement à des erreurs.

L’API Canvas est relativement simple à prendre en main, tout ce qu’elle fait c’est dessiner des rectangle ou des chemins de lignes à des coordonnées précises. La complexité des formes dessinées dépend donc de comment l’API est utilisée.

Lire l’article en entier

Programmation de Jeux Vidéos avec Canvas

Depuis que j’ai tapé mes premières lignes de code il y a maintenant une bonne quinzaine d’années l’idée de pouvoir faire un jeu moi même à régulièrement traîné dans ma tête. Pour tout dire, mes premières ligne de C/C++ se sont faites vraiment à l’arrache en modifiant des valeurs de variables dans le SDK de Half Life en suivant des tutos et des conseils sur Half Life Design (les vrais auront une grosse pointe de nostalgie).

Ayant tout appris par moi même, il m’a fallu énormément de temps pour absorber et comprendre les bases de la programmation. J’ai donc toujours assez vite déchanté en m’approchant ne serait-ce qu’un poil de l’idée de créer un jeu vidéo.

Moi en relisant mes vieux posts sur des vieux forums

D’ailleurs si je devais relire des posts de forums ou je déclarais vouloir faire le prochain MMORPG révolutionnaire, sans avoir une once de connaissance dans le sujet. A mon avis j’irais vite me cacher.

Les temps ont changés, j’ai appris, les technologies permettent beaucoup plus de choses que par le passé. On va donc reprendre les choses depuis le début.

Lire l’article en entier