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 = 0vel_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.
Défi
Facile- Ajoute
GRAVITY = 1en haut etvel_y = 0avant la boucle de jeu. - À chaque image, ajoute
GRAVITYàvel_y, puis ajoutevel_yàplayer.y, au lieu deplayer.y += 4. - Lorsque
player.bottomdépasseFLOOR, définisplayer.bottom = FLOORetvel_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()
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