Błysk po trafieniu
Część sekcji Dźwięk i odczucia z gry ścieżki Pygame w Coddy. Lekcja 13 z 23.
Gdy trafisz wroga, gra powinna od razu to pokazać, nawet zanim zmieni się pasek zdrowia. Zwykle stosuje się błysk po trafieniu: przez kilka klatek wróg jest rysowany całkowicie na biało.
Potrzebny jest jeden licznik — liczba klatek pozostałych do końca błysku. Trafienie ustawia jego wartość; w każdej klatce jest ona zmniejszana:
flash = 0
...
# trafienie
hp -= 1
flash = 6
...
# każda klatka
if flash > 0:
flash -= 1Podczas rysowania licznik wskazuje kolor:
if flash > 0:
pygame.draw.rect(screen, (255, 255, 255), enemy)
else:
pygame.draw.rect(screen, (220, 80, 80), enemy)Sześć klatek to jedna dziesiąta sekundy: wystarczająco długo, by zauważyć błysk, ale na tyle krótko, by przy kolejnym trafieniu mógł pojawić się ponownie. Gracz od razu widzi, że atak trafił.
Duszek z obrazem może błyskać w ten sam sposób: zachowaj jego białą kopię obrazu albo wypełnij kopię bielą i wyświetlaj ją, gdy licznik jest aktywny. Wiele gier sprawia, że gracz miga na czerwono po otrzymaniu obrażeń, używając tego samego licznika.
Wyzwanie
ŁatwySpacja trafia czerwonego przeciwnika i zmniejsza jego HP. Spraw, aby po każdym trafieniu migał:
- Przed pętlą ustaw
flash = 0. - Po trafieniu ustaw
flash = 6. - W każdej klatce zmniejszaj
flasho 1, gdy jest większe od 0. - Rysuj przeciwnika na biało
(255, 255, 255), gdyflashjest większe od 0, a w przeciwnym razie na czerwono.
Spróbuj swoich sił
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()
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Dźwięk i odczucia z gry
1Efekty dźwiękowe
Wczytywanie dźwiękuDźwięk w reakcji na zdarzenieGłośność dźwiękuDźwięki i przytrzymane klawisze4Wstrząs ekranu i błysk po trafieniu
Wstrząs ekranuBłysk po trafieniuPauza przy trafieniuNie przesadzajPoćwicz samodzielnie: Edytor online Pygame