Chap 2 – Ajouter un personnage joueur et des mécaniques de saut dans un jeu avec Odin et Raylib

Introduction

Dans cet article, nous allons découvrir comment ajouter un personnage joueur dans un jeu en utilisant le langage de programmation Odin et la bibliothèque Raylib. Nous couvrirons les étapes pour permettre le déplacement du personnage, l’ajout de la mécanique de saut, et la gestion de la gravité. Cette approche servira de base pour les futurs épisodes où des fonctionnalités supplémentaires, comme des animations de sprites, seront ajoutées.

Configuration initiale du projet

Création du personnage joueur

La première étape consiste à ajouter un personnage joueur. Au départ, il sera représenté par un simple rectangle vert. Voici comment le dessiner à l’écran :

rl.do_draw_rectangle_v(640, 320, 64, 64, rl.green);

Ce code dessine un rectangle de 64×64 pixels au milieu de l’écran, avec des coordonnées centrées à (640, 320).

La boucle du jeu

Le jeu fonctionne en continu grâce à une boucle qui redessine l’écran. Cela permet de rafraîchir les mouvements du joueur en temps réel :

while !rl.window_should_close() {
  rl.clear_background(rl.blue);
  // Dessiner le joueur ici
  rl.end_drawing();
}

Déplacement du personnage

Mouvement vers la gauche et la droite

Le déplacement du personnage est contrôlé par des touches de clavier. Voici comment détecter l’entrée des touches gauche et droite et ajuster la position du personnage :

if rl.is_key_down(rl.key_left) {
  player_pos.x -= 400 * rl.get_frame_time();
}
if rl.is_key_down(rl.key_right) {
  player_pos.x += 400 * rl.get_frame_time();
}

Le joueur se déplace de 400 pixels par seconde en fonction du temps de trame, ce qui permet de garder une fluidité du mouvement, quelle que soit la fréquence d’images.

Gestion du temps de trame

Le temps de trame est essentiel pour s’assurer que les déplacements sont proportionnels à la fréquence des images du jeu. En multipliant la vitesse par le temps de trame, on garantit que les déplacements restent constants, même à des cadences d’images variables.

Implémentation du saut et de la gravité

Ajout de la gravité

Le joueur est soumis à une force gravitationnelle simulée. Voici comment la gravité est implémentée :

player_vel.y += 2000 * rl.get_frame_time();
player_pos.y += player_vel.y * rl.get_frame_time();

La vitesse verticale du joueur augmente constamment, ce qui simule l’effet de la gravité. Cette vélocité est ensuite ajoutée à la position du joueur pour provoquer la chute.

Activation du saut

Lorsque le joueur appuie sur la barre d’espace, il saute avec une vélocité initiale vers le haut :

if rl.is_key_pressed(rl.key_space) && player_grounded {
  player_vel.y = -600;
  player_grounded = false;
}

La vitesse verticale est mise à -600 pour provoquer un saut vers le haut. La variable player_grounded empêche le saut en l’air.

Gestion des collisions et du sol

Empêcher les chutes infinies

Afin d’éviter que le joueur ne tombe hors de l’écran, une limite est fixée pour représenter le sol. Si le personnage touche le sol, il s’arrête :

if player_pos.y > rl.get_screen_height() - 64 {
  player_pos.y = rl.get_screen_height() - 64;
  player_grounded = true;
}

Cette logique permet de fixer le bas de l’écran comme une plateforme solide, empêchant le joueur de passer à travers.

Améliorations futures

Cet article couvre les bases du déplacement et du saut pour un jeu 2D. Dans les futurs épisodes, nous verrons comment remplacer le simple rectangle par une animation de sprite et ajouter d’autres fonctionnalités intéressantes.

Conclusion

Le développement de jeux avec Odin et Raylib permet une approche simple mais puissante pour gérer les bases de la physique et du contrôle des personnages. Avec l’ajout de déplacements fluides, de sauts réalistes et de la gestion de la gravité, vous avez maintenant une fondation solide pour continuer à développer votre propre jeu.

By laurent

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.