Efekt „pop” przy zebraniu
Część sekcji Dźwięk i odczucia z gry ścieżki Pygame w Coddy. Lekcja 18 z 23.
Gdy zbierasz klejnot, wynik zwiększa się o jeden, ale patrzysz na klejnot, a nie na róg ekranu. Krótki efekt wyskoku przyciąga wzrok do licznika: ikona powiększa się, a potem wraca do swojego rozmiaru.
Przechowuj skalę, gdzie 1.0 oznacza normalny rozmiar. Zebranie klejnotu ustawia ją na 1.6; w każdej klatce zbliża się ona stopniowo do 1, używając tego samego wiersza co wcześniej:
pop = 1.6 # gdy zostanie zebrany klejnot
pop += (1 - pop) * 0.2 # co klatkęPodczas rysowania skala określa rozmiar. Utwórz Rect o takim rozmiarze, a następnie ustaw jego środek we właściwym miejscu, aby ikona powiększała się wokół środka, a nie od rogu:
size = int(20 * pop)
icon = pygame.Rect(0, 0, size, size)
icon.center = (30, 30)Powiększenie następuje natychmiast, a powrót jest stopniowy. Dzięki temu efekt przypomina wyskok: ułamek 0.2 przywraca pierwotny rozmiar w około ćwierć sekundy.
W przypadku obrazu przeskaluj go za pomocą pygame.transform.scale_by(image, pop) i w ten sam sposób ustaw środek jego Rect.
Wyzwanie
ŁatwyKliknij fioletowy klejnot, aby go zebrać. Spraw, by złota ikona wyskakiwała:
- Ustaw
pop = 1.0przed pętlą. - Ustaw
pop = 1.6, gdy klejnot zostanie zebrany. - W każdej klatce stopniowo przywracaj wartość:
pop += (1 - pop) * 0.2. - Narysuj ikonę o szerokości i wysokości
int(20 * pop)pikseli, nadal wyśrodkowaną w punkcie(30, 30).
Spróbuj swoich sił
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Gem Picker")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
coin_sound = pygame.mixer.Sound("assets/sounds/coin.ogg")
gem = pygame.Rect(300, 200, 24, 24)
score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN and gem.collidepoint(event.pos):
score += 1
coin_sound.play()
gem.topleft = (random.randint(80, 420), random.randint(90, 300))
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (170, 90, 230), gem)
icon = pygame.Rect(0, 0, 20, 20)
icon.center = (30, 30)
pygame.draw.rect(screen, (255, 200, 60), icon)
label = font.render(f"x {score}", True, (240, 240, 240))
screen.blit(label, (52, 20))
pygame.display.flip()
clock.tick(60)
pygame.quit()
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 przesadzaj5Płynny ruch
Poruszanie się w kierunku celuPłynna kameraEfekt „pop” przy zebraniuPłynność przy dowolnej liczbie klatek na sekundęPoćwicz samodzielnie: Edytor online Pygame