Rester subtil
Fait partie de la section Son et sensations de jeu du Journey Pygame de Coddy. Leçon 15 sur 23.
Le game feel est un assaisonnement. Une petite secousse alourdit un atterrissage ; une trop forte secousse rend le jeu difficile à lire et peut donner la nausée aux joueurs. Deux habitudes permettent de garder le contrôle.
Fixez une limite. Lorsque les effets s’accumulent, ils peuvent croître sans fin. Ici, chaque atterrissage ajoute 12 à shake ; quatre caisses qui atterrissent en même temps le font dépasser 40, et la vue saute de 13 pixels. min() lui impose un plafond :
shake = min(shake + 12, 18)La secousse dure toujours plus longtemps si les caisses continuent d’atterrir, mais elle ne déplace jamais la vue de plus de 18 // 3, soit 6 pixels.
Laissez les joueurs la désactiver. Certaines personnes ne peuvent pas jouer lorsque l’écran bouge. Un réglage ne nécessite qu’une variable :
shake_on = True
...
if shake_on:
offset = (random.randint(-amount, amount), random.randint(-amount, amount))Affichez le libellé après avoir blitté le monde, directement sur l’écran. Le texte qui fait partie de l’interface doit rester immobile pendant que le monde tremble.
Défi
MoyenAvec la barre d’espace, des caisses tombent, et chaque atterrissage ajoute 12 à shake. Atténue l’effet :
- Modifie l’atterrissage pour que
shakene dépasse jamais 18 :shake = min(shake + 12, 18). - Définis
shake_on = Trueavant la boucle ; S inverse sa valeur. - Choisis un décalage aléatoire uniquement lorsque
shake_onest vrai. - Après avoir affiché le monde, dessine
Shake: OnouShake: Offà l’écran en(10, 10).
Essayez vous-même
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Crate Drop")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 28)
thud_sound = pygame.mixer.Sound("assets/sounds/thud.ogg")
falling = []
landed = []
shake = 0
world = pygame.Surface((480, 360))
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:
falling.append(pygame.Rect(random.randint(140, 400), -40, 40, 40))
for crate in falling:
crate.y += 8
if crate.bottom >= 300:
crate.bottom = 300
landed.append(crate)
thud_sound.play()
shake += 12
falling = [crate for crate in falling if crate.bottom < 300]
world.fill((30, 30, 46))
pygame.draw.rect(world, (80, 80, 100), (0, 300, 480, 60))
pygame.draw.rect(world, (80, 160, 255), (60, 220, 30, 80))
for crate in falling + landed:
pygame.draw.rect(world, (170, 110, 60), crate)
offset = (0, 0)
if shake > 0:
amount = shake // 3
offset = (random.randint(-amount, amount), random.randint(-amount, amount))
shake -= 1
screen.fill((0, 0, 0))
screen.blit(world, offset)
pygame.display.flip()
clock.tick(60)
pygame.quit()
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
4Tremblement de l’écran et flash d’impact
Tremblement de l’écranFlash d’impactArrêt sur impactRester subtilEntraînez-vous par vous-même : Playground Pygame