Sauter depuis le sol
Fait partie de la section Les mondes du Journey Pygame de Coddy. Leçon 11 sur 35.
Un saut correspond à une vitesse négative. Définis vel_y = -15 et le joueur se déplace vers le haut de 15 pixels ; la gravité réduit cette valeur de 1 à chaque image jusqu'à ce qu'il retombe. Cela donne la trajectoire en arc.
Un saut ne doit commencer que depuis le sol. Garde un indicateur qui précise si le joueur se trouvait au sol pendant cette image :
vel_y += GRAVITY
player.y += vel_y
on_ground = False
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0
on_ground = TrueUtilise l'événement KEYDOWN pour le saut, afin qu'une pression déclenche un seul saut, que la touche soit maintenue ou non :
elif event.type == pygame.KEYDOWN and event.key in (pygame.K_SPACE, pygame.K_UP):
if on_ground:
vel_y = JUMPevent.key in (pygame.K_SPACE, pygame.K_UP) vaut True pour l'une ou l'autre touche. En l'air, on_ground vaut False, donc une deuxième pression ne fait rien.
Défi
Moyen- Ajoute
JUMP = -15en haut eton_ground = Falseavant la boucle du jeu. - À chaque image, définis
on_ground = Falseavant le test du sol eton_ground = Trueà l’intérieur de celui-ci. - Lors d’un
KEYDOWNsur Espace ou la flèche Haut, lorsqueon_groundvaut True, définisvel_y = JUMP.
Essayez vous-même
import pygame
TILE = 36
FLOOR = 324
GRAVITY = 1
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))
vel_y = 0
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
vel_y += GRAVITY
player.y += vel_y
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0
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()
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