Menu
CoddyTech

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 = -4

Une 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.

challenge icon

Défi

Facile
  1. Lors d’un KEYUP de la barre d’espace ou de la flèche vers le haut, lorsque vel_y est inférieur à -4, définis vel_y = -4.
  2. Laisse le saut sur KEYDOWN tel 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()
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Playground Pygame