La camera et l’isométrie

N’ayant plus beaucoup de temps pour bosser sur le moteur 2D ni pour écrire des articles, j’ai eu du mal à aborder le système de caméra et l’intégrer dans le moteur.
Dans le même temps, j’avais envie d’aborder la construction d’une map en 2D isométrique, là encore j’étais pas sur de mon coup et je n’arrivais pas à franchir le pas de l’intégrer dans le moteur sans savoir de quoi il en retourne.

Je me suis donc dit, part sur quelques chose de simple, teste les concept sans les intégrer dans le moteur et tu verras après.

Vous pouvez voir un exemple fonctionnel à cette adresse :
http://demo.morgiver.net/camera-iso/

Tuiles visibles de la map isométrique
Lire l’article en entier

Des Instructions conditionnelles

Dans le dernier article sur les instructions, on a pu voir ensemble la base de la manipulation de variable. Mais les instructions vont plus loin que ça, on peut manipuler les variables selon certaines condition imposées à l’ordinateur.

On va donc voir les Bloc de Conditions ensemble. A mes yeux c’est l’un des concept les plus importants en programmation. Sans les conditions on ne pourrait rien faire. Par exemple, si un utilisateur se connecte à un site web et qu’il donne son mot de passe, il y aura deux situations :

  • Soit le mot de passe est juste.
  • Soit le mot de passe est mauvais.

Une condition abouti toujours à 2 situations possibles maximum, soit la condition est remplie, soit elle ne l’est pas. Oui, on en revient au binaire, soit c’est 0 soit c’est 1.

Lire l’article en entier

Ecrire des Instructions

La programmation est un monde qui rassemble plusieurs domaines et spécialisations. En tant que débutant ce qui importe pour l’instant c’est :

  1. L’Algorithmique
  2. La syntaxe de base de votre premier langage

L’Algorithmique c’est ce qui permet de développer un raisonnement logique sous forme de suite d’instruction. Que ce soit une recette, le plan Ikéa de votre nouveau lit ou votre projet d’application révolutionnaire, tout passera par le développement d’algorithmes dans votre tête (ou sur papier, c’est mieux) avant d’être écrit dans un langage de programmation.

La syntaxe d’un langage c’est son orthographe, ses spécificités. Il y a énormément de concept possible en programmation, plusieurs styles de programmation, tous les langages ne supportent pas tous les styles et concepts de programmation. Certains généralises et tente de faire un peu de tout, d’autre sont spécialisés. Prenons par exemple les langages C et C++, le C est un langage Impératif, tandis que le C++ (qui reprend la logique du langage C ) est un langage Orientée Objet.
Chaque langage est écrit pour remplir des besoins exprimés par les développeurs. Et des besoins, il en existe de toute sorte.

Lire l’article en entier

Introduction à la programmation

Certaines personnes ont exprimés l’envie d’apprendre et d’aborder la programmation. D’autre m’ont dit « ton site il est bien mais je comprends rien ».
Donc je me suis dit, ok, lançons nous dans une série d’articles destinés aux vrais débutants. Genre « j’ai jamais écrit une seule ligne de code et je sais pas ce que c’est un terminal ».

La programmation, c’est l’art de donner des instructions à un ordinateur pour qu’il les exécute dans l’ordre. Ces instructions serviront à manipuler et traiter des données pour avoir un résultat final.

En gros schématiquement ça ressemblerait à ça :
Entrée des données -> Traitement -> Résultat
On dira à l’ordinateur comment recevoir les données, comment les traiter et sortir un résultat. Retenez bien ce schéma, parce qu’il reviendra tout le temps.

Lire l’article en entier

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

La Boucle d’Animation

Jusqu’ici nous n’avons vu que des scènes statiques et pour cause nous n’avons pas encore intégrer la gestion de la boucle d’animation.

La boucle d’animation permettra d’enchaîner les mises à jours de nos scène et leurs entités. Par exemple mettre à jour la position d’une entité sur le plan pourra donner l’illusion qu’elle se déplace.

Comment la définir ? Comment va-t-on faire pour faire tourner une boucle qui permettra d’exécuter la procédure de mise à jours de notre scène ? Question qui mènera à d’autre réflexion, par exemple quelle est la procédure de mise à jour de notre scène ? Quelles sont les opérations prioritaires ? Quelles sont ces opérations à mener d’ailleurs ?

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