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.