Petits sauts
Fait partie de la section Les mondes du Journey Pygame de Coddy. Leçon 12 sur 35.
Dans la plupart des jeux de plateforme, une pression brève donne un petit bond et une pression longue, un saut complet. Le joueur peut ainsi choisir la hauteur de chaque saut.
Lorsque la touche de saut est relâchée, un événement KEYUP est déclenché. Si le joueur est encore en train de monter rapidement, ralentis sa montée :
elif event.type == pygame.KEYUP and event.key in (pygame.K_SPACE, pygame.K_UP):
if vel_y < -4:
vel_y = -4Une touche maintenue enfoncée n’envoie jamais de KEYUP pendant la montée : le saut atteint donc sa hauteur maximale. Une pression brève déclenche cet événement une image plus tard, la vitesse tombe à -4, et la gravité fait redescendre le joueur quelques images après.
La condition vel_y < -4 est importante. Près du sommet, ou pendant la chute, vel_y est supérieur à -4, et le régler à -4 à ce moment-là ferait remonter le joueur.
Défi
Facile- Lors d’un
KEYUPde la barre d’espace ou de la flèche vers le haut, lorsquevel_yest inférieur à -4, définisvel_y = -4. - Laisse le saut sur
KEYDOWNtel quel.
Essayez vous-même
import pygame
TILE = 36
FLOOR = 324
GRAVITY = 1
JUMP = -15
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Short Hops")
clock = pygame.time.Clock()
background = pygame.image.load("assets/backgrounds/clouds.png").convert_alpha()
grass_img = pygame.image.load("assets/images/grass.png").convert_alpha()
player_img = pygame.image.load("assets/images/player.png").convert_alpha()
player = player_img.get_rect(topleft=(264, 40))
vel_y = 0
on_ground = False
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 in (pygame.K_SPACE, pygame.K_UP):
if on_ground:
vel_y = JUMP
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 4
if keys[pygame.K_RIGHT]:
player.x += 4
vel_y += GRAVITY
player.y += vel_y
on_ground = False
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0
on_ground = True
for y in range(0, 360, 72):
for x in range(0, 576, 72):
screen.blit(background, (x, y))
for x in range(0, 576, TILE):
screen.blit(grass_img, (x, FLOOR))
screen.blit(player_img, player)
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 Les mondes
1Des cartes à partir de texte
Un niveau en texteLignes et colonnesDes lettres qui ont un sensOù commence le joueurUn écran à la fois4Collisions avec les plateformes
Murs à gauche et à droiteAtterrir sur les plateformesSe cogner la têteTomber hors du niveauUn axe à la fois3Gravité et saut
Tomber avec la gravitéSauter depuis le solPetits sautsUne vitesse de chute maximaleTampon de saut6Des ennemis en patrouille
Un blob en patrouilleÉcraser ou se faire toucherUn cycle de marcheDes ennemis issus de la carteEntraînez-vous par vous-même : Playground Pygame