Menu
CoddyTech

Flash d’impact

Fait partie de la section Son et sensations de jeu du Journey Pygame de Coddy. Leçon 13 sur 23.

Quand tu touches un ennemi, le jeu devrait le montrer immédiatement, même avant que sa barre de vie ne change. La méthode habituelle consiste à faire clignoter l’ennemi à l’impact : pendant quelques images, l’ennemi est dessiné entièrement en blanc.

Il faut un compteur qui indique le nombre d’images restantes pendant lesquelles l’ennemi clignote. Un coup le règle ; à chaque image, sa valeur diminue :

flash = 0
...
# un coup reçu
hp -= 1
flash = 6
...
# à chaque image
if flash > 0:
    flash -= 1

Lors du dessin, le compteur détermine la couleur :

if flash > 0:
    pygame.draw.rect(screen, (255, 255, 255), enemy)
else:
    pygame.draw.rect(screen, (220, 80, 80), enemy)

Six images correspondent à un dixième de seconde : assez longtemps pour qu’on le remarque, mais assez peu pour que le coup suivant puisse déclencher un nouveau clignotement. Le joueur voit d’un coup d’œil que l’attaque a touché sa cible.

Un sprite avec une image peut clignoter de la même façon : garde une copie blanche de son image, ou remplis de blanc une copie, puis affiche-la pendant que le compteur est actif. Dans de nombreux jeux, le joueur clignote en rouge lorsqu’il subit des dégâts, avec le même compteur.

challenge icon

Défi

Facile

La barre d’espace touche l’ennemi rouge et réduit ses PV. Faites clignoter l’ennemi à chaque coup :

  1. Initialisez flash = 0 avant la boucle.
  2. Lorsqu’un coup est porté, définissez flash = 6.
  3. À chaque image, réduisez flash de 1 tant qu’il est supérieur à 0.
  4. Dessinez l’ennemi en blanc (255, 255, 255) tant que flash est supérieur à 0, et en rouge sinon.

Essayez vous-même

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Training Dummy")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

hit_sound = pygame.mixer.Sound("assets/sounds/hit.ogg")
player = pygame.Rect(120, 150, 60, 60)
enemy = pygame.Rect(300, 150, 60, 60)
hp = 5

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE and hp > 0:
            hp -= 1
            hit_sound.play()

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), player)
    if hp > 0:
        pygame.draw.rect(screen, (220, 80, 80), enemy)
    label = font.render(f"Enemy HP: {hp}", True, (240, 240, 240))
    screen.blit(label, (300, 110))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Son et sensations de jeu

Entraînez-vous par vous-même : Playground Pygame