Utiliser un joystick dans PyGame (bonus facultatif)

Un joystick (ou joypad, manette) peut être utilisé dans un jeu PyGame pour déplacer un personnage. Ce périphérique est souvent composé de sticks analogiques et de boutons. PyGame permet d'accéder à ces éléments via son module joystick.

    3ttr
  • Découverte

Initialisation du joystick

Avant de lire les mouvements du joystick, il faut l’activer dans PyGame :

pygame.init()
pygame.joystick.init()

# Activer le premier joystick détecté
joystick = pygame.joystick.Joystick(0)
joystick.init()

⚠️ Ton joystick doit être branché avant de lancer le programme.

Lire les mouvements du stick

La majorité des joysticks ont deux axes analogiques (gauche/droite et haut/bas). On peut lire ces axes avec :

x_axis = joystick.get_axis(0)  # Axe horizontal
y_axis = joystick.get_axis(1)  # Axe vertical

Chaque axe renvoie une valeur entre -1.0 (à gauche ou en haut) et 1.0 (à droite ou en bas). Le centre correspond à 0.0.

Appliquer le mouvement au joueur

Voici comment déplacer un joueur avec un joystick, en tenant compte d’une vitesse :

vitesse = 5
player_x += x_axis * vitesse
player_y += y_axis * vitesse

Le personnage se déplace plus ou moins vite selon l’inclinaison du stick. Cela donne un mouvement fluide et progressif.

Exemple de boucle de jeu avec joystick

import pygame

pygame.init()
pygame.joystick.init()
joystick = pygame.joystick.Joystick(0)
joystick.init()

screen = pygame.display.set_mode((800, 600))
player = pygame.image.load("joueur.png")
x, y = 400, 300
vitesse = 5
clock = pygame.time.Clock()
running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    x_axis = joystick.get_axis(0)
    y_axis = joystick.get_axis(1)
    
    x += x_axis * vitesse
    y += y_axis * vitesse

    screen.fill((0, 0, 0))
    screen.blit(player, (x, y))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Bonnes pratiques

  • Test de zone morte : comme le joystick n’est jamais parfaitement stable, on peut ignorer les petites valeurs proches de 0 (zone morte).
if abs(x_axis) < 0.1:
    x_axis = 0
  • Limiter la position pour que le personnage ne sorte pas de l’écran (voir article précédent).
  • Vérifie combien de joysticks sont branchés avec pygame.joystick.get_count() si tu veux gérer plusieurs manettes.

Avec cette base, tu peux facilement ajouter un support joystick dans ton jeu PyGame et permettre aux joueurs de se déplacer autrement qu’au clavier.

Pour aller plus loin