Sauter lors du ramassage
Fait partie de la section Son et sensations de jeu du Journey Pygame de Coddy. Leçon 18 sur 23.
Lorsque tu ramasses une gemme, le score augmente de un, mais ton regard est sur la gemme, pas sur le coin. Un bref effet de rebond attire le regard vers le compteur : l’icône s’agrandit brusquement, puis reprend sa taille.
Garde une échelle, 1.0 pour la taille normale. Un ramassage la règle sur 1.6 ; à chaque image, elle revient progressivement vers 1 avec la même ligne qu’avant :
pop = 1.6 # lorsqu’une gemme est ramassée
pop += (1 - pop) * 0.2 # à chaque imageLors du dessin, l’échelle détermine la taille. Crée le Rect à cette taille, puis place son centre, afin que l’icône grandisse autour de son milieu plutôt qu’à partir de son coin :
size = int(20 * pop)
icon = pygame.Rect(0, 0, size, size)
icon.center = (30, 30)Le saut est instantané et le retour est progressif. C’est ce qui donne l’impression d’un rebond : une fraction de 0.2 la ramène en environ un quart de seconde.
Pour une image, redimensionne-la avec pygame.transform.scale_by(image, pop) et centre son Rect de la même manière.
Défi
FacileClique sur la gemme violette pour la ramasser. Fais rebondir l’icône dorée :
- Définis
pop = 1.0avant la boucle. - Définis
pop = 1.6lorsqu’une gemme est ramassée. - À chaque image, ramène-la progressivement à sa valeur initiale :
pop += (1 - pop) * 0.2. - Dessine l’icône avec une largeur et une hauteur de
int(20 * pop)pixels, toujours centrée en(30, 30).
Essayez vous-même
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()
Toutes les leçons de Son et sensations de jeu
4Tremblement de l’écran et flash d’impact
Tremblement de l’écranFlash d’impactArrêt sur impactRester subtil5Mouvement fluide
Se déplacer vers une cibleUne caméra fluideSauter lors du ramassageUne animation fluide à toute fréquence d’imagesEntraînez-vous par vous-même : Playground Pygame