Menu
CoddyTech

Sauter

Fait partie de la section Règles du jeu du Journey Pygame de Coddy. Leçon 24 sur 29.

Un saut est une vitesse vers le haut que la gravité annule. Donne une vitesse verticale au coureur, vy. À chaque image, la gravité lui ajoute 1 et le coureur se déplace de cette valeur :

def update(self):
    self.vy += GRAVITY
    self.rect.y += self.vy
    if self.rect.bottom >= GROUND_Y:
        self.rect.bottom = GROUND_Y
        self.vy = 0

y augmente vers le bas, donc un saut définit vy = -16 : le coureur monte de 15 pixels, puis de 14, puis de 13, ralentit jusqu'à s'arrêter à environ 120 pixels de hauteur et retombe de plus en plus vite. Lorsqu'il atteint la ligne du sol, il est replacé dessus et s'arrête.

Ne saute que depuis le sol. Sans cette vérification, chaque pression en l'air déclencherait un nouveau saut et le coureur pourrait monter indéfiniment :

def jump(self):
    if self.rect.bottom == GROUND_Y:
        self.vy = -16

La section 5 s'appuie sur cela en ajoutant des plateformes sur lesquelles atterrir.

challenge icon

Défi

Moyen
  1. Ajoute GRAVITY = 1 et self.vy = 0 au coureur.
  2. Écris update() comme indiqué et appelle runner.update() à chaque image, avant le dessin.
  3. Écris jump() : vy = -16, uniquement lorsque le coureur est au sol.
  4. La barre d’espace ou la flèche vers le haut appelle runner.jump().

Essayez vous-même

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 320))
pygame.display.set_caption("Sky Runner")
clock = pygame.time.Clock()

SKY = (140, 200, 240)
GROUND = (90, 160, 80)
GROUND_Y = 260


class Runner(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("assets/images/player.png").convert_alpha()
        self.rect = self.image.get_rect(midbottom=(100, GROUND_Y))


runner = Runner()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill(SKY)
    pygame.draw.rect(screen, GROUND, (0, GROUND_Y, 640, 60))
    screen.blit(runner.image, runner.rect)
    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 Règles du jeu

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