Créer des GameObjects en JavaScript : Update, Draw et héritage prototype

HTML5 et Game Developement

Les GameObjects sont des objets génériques (function), qui peuvent contenir toutes les informations et ressources nécessaires aux éléments du jeu. Ils peuvent donc devenir : un personnage, un ennemi, un power-up, une plateforme, une interface graphique et tous les éléments de notre jeu vidéo.
Update et Draw

Comme mentionné dans la leçon précédente, notre moteur de jeu est principalement basé sur une boucle qui appelle les fonctions Update et Draw à chaque frame. Nous pouvons considérer ces fonctions comme les principaux événements du jeu. En conséquence, tous les GameObjects devront gérer ces événements avec les méthodes relatives Update et Draw.

En d'autres termes, ce sont des fonctions communes à tous les éléments du jeu, qui nous permettent de gérer toutes les instances de manière générique, même si elles ont des comportements, des variables et des fonctions différents.

Dans la leçon précédente, nous avons également organisé la séquence d'événements dans le GameLoop, afin que Update soit toujours exécuté avant le Draw. La raison est simple : Update a pour tâche de modifier et de déplacer les objets sur la scène, de vérifier les collisions, de gérer les images de l'animation, etc.

De cette façon, avant l'exécution de Draw, toutes les instances sont mises à jour et peuvent être dessinées à la bonne position, avec le bon frame de l'animation.

Si vous le souhaitez, vous pouvez insérer d'autres événements secondaires tels que EndLoop, qui est exécuté après le Draw, principalement utilisé pour mettre à jour certains GameObject après le rendering.

Héritage : créer des GameObjects similaires, mais avec leur propre identité

La POO en JavaScript est implémentée différemment par rapport à d'autres langages plus spécifiques à la programmation orientée objet (Java, C#, C++). En fait, il n'y a pas de classes, mais vous pouvez toujours utiliser l'héritage "prototypé" via l'objet prototype.

Pour mieux comprendre comment cela fonctionne, créons un nouveau fichier test.html et insérons le code suivant (ou utilisez la console du navigateur) dans la balise <script>:

function GameObject(x, y) {
this.x = x;
this.y = y;

this.showInfo = function() {
alert(this.x + "," + this.y + "," + this.speed);
}
}

Nous avons créé une fonction GameObject générale, qui contient les variables et les fonctions que nous voulons hériter du prototype, voilà comment :

 function Balle(x, y, speed){
    GameObject.call(this, x, y);
    this.speed = speed;
}

Dans ce script, nous définissons une "sous-classe" Balle, qui prend des valeurs de GameObject.

Lors de la création, nous utilisons la méthode call, pour appeler le constructeur de GameObject, en utilisant la portée de l'instance courante (this) : si nous générons plus d'instances de Balle, nous éviterons de créer des variables et des fonctions avec la même référence l'un l'autre.

Donc, à travers un prototype, faisons en sorte que Balle hérite de la structure de GameObject, mais qu'elle garde son constructeur actif :

 // hérite de GameObject
Balle.prototype = Object.create(GameObject.prototype);
 
// reparamètre le constructeur
Balle.prototype.constructor = Balle;
 
p1 = new Balle(10, 150, 30);
p2 = new Balle(20, 200, 1);
p3 = new Balle(30, 300, 23);
p1.showInfo();
p2.showInfo();
p3.showInfo();

Créons ensuite plusieurs instances de Balle, et appelons pour chacune la fonction showInfo (). Si tout a marché correctement, 3 messages s'afficheront en séquence, avec les résultats suivants :

10,150,30
20,200,1
30,300,23

Une utilisation concrète dans le jeu vidéo pourrait être la création d'une série d'ennemis (Slime, Troll, Mage, Dragon) avec différents comportements et attaques, tous les enfants d'un objet "Ennemi" qui a les fonctions de base et les variables (Attack () , Move (), Destroy (), DropItem (), etc.).

Comme nous pouvons le voir, l'utilisation du prototype réduit considérablement le travail, en diminuant la quantité de code à écrire. En fait, nous pouvons exploiter un objet générique pour définir les variables et les fonctions en commun.

➡️ Créer des jeux HTML5, le guide

Sudoku Quest Banner

Formations de Itamde

"

Itamde est également une école de programmation en ligne.

Itamde

Apprenez ce que vous voulez, à votre rythme

0 commentaire

Envoyer un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pourriez être intéressé par...

Web

Les coulisses d’un projet de développement web

Quand on visite un site web terminé, on ne voit que le résultat final : des pages propres, des animations fluides, un contenu bien organisé. Mais derrière cette façade se cache un processus de création bien plus complexe, fait de réflexion stratégique, de décisions...

Image pour un blog

Quels sont les outils indispensables pour un développeur web ?

Le métier de développeur web évolue constamment, et avec lui, les outils nécessaires pour travailler efficacement. Entre les éditeurs de code, les frameworks, les outils de débogage et les plateformes de déploiement, le choix peut paraître écrasant pour les débutants...

HTML5 et Game Developement

Recréer Snake en HTML et JavaScript vanille

Parfois, les meilleurs projets naissent sans prétention particulière, juste pour le plaisir de coder et de se replonger dans les classiques du jeu vidéo. C'est exactement l'esprit qui a présidé à la création de cette version rétro de Snake, entièrement réalisée en...

Restez informé des dernières actualités et mises à jour

Accédez au contenu réservé

Découvrez les coulisses de nos projets, des ressources exclusives et l'avancée de nos créations en temps réel.

Inscrivez-vous à la newsletter

Recevez nos actualités, nos réflexions créatives et les nouveautés de l'atelier directement dans votre boîte mail.

Suivez-nous

Rejoignez notre communauté sur les réseaux pour suivre nos projets au quotidien et échanger avec nous.