Menu
CoddyTech

Tomber avec la gravité

Fait partie de la section Les mondes du Journey Pygame de Coddy. Leçon 10 sur 35.

Le héros dans la fenêtre descend à une vitesse constante de 4 pixels par image, comme dans un ascenseur. Les objets réels accélèrent lorsqu’ils tombent. Stocke la vitesse verticale du joueur dans une variable et augmente-la à chaque image :

vel_y += GRAVITY
player.y += vel_y
if player.bottom > FLOOR:
    player.bottom = FLOOR
    vel_y = 0

vel_y est la vitesse en pixels par image ; une valeur positive correspond à un déplacement vers le bas. GRAVITY = 1 l’augmente de un à chaque image : le joueur tombe donc de 1, puis 2, puis 3 pixels, et ainsi de suite.

Le sol est ici une ligne située à FLOOR = 324, en haut de l’herbe. Lorsque le joueur la dépasse, place son bord inférieur sur la ligne et arrête sa chute. Le chapitre suivant remplacera cette ligne par de vraies plateformes.

Le joueur est le Rect de l’image : player_img.get_rect(topleft=(264, 40)) est un Rect de 48 par 48 à cet endroit, et screen.blit(player_img, player) dessine l’image à cet endroit.

challenge icon

Défi

Facile
  1. Ajoute GRAVITY = 1 en haut et vel_y = 0 avant la boucle de jeu.
  2. À chaque image, ajoute GRAVITY à vel_y, puis ajoute vel_y à player.y, au lieu de player.y += 4.
  3. Lorsque player.bottom dépasse FLOOR, définis player.bottom = FLOOR et vel_y = 0.

Essayez vous-même

import pygame

TILE = 36
FLOOR = 324

pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Gravity")
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))

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

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.x -= 4
    if keys[pygame.K_RIGHT]:
        player.x += 4

    player.y += 4
    if player.bottom > FLOOR:
        player.bottom = FLOOR

    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