Une vitesse de chute maximale
Fait partie de la section Les mondes du Journey Pygame de Coddy. Leçon 13 sur 35.
La gravité continue d’augmenter la vitesse de chute. Si le joueur tombe d’assez haut, il parcourt 30 ou 40 pixels en une image. Une tuile mesure 36 pixels de haut ; à cette vitesse, le joueur peut donc traverser une plateforme entre deux images sans jamais entrer en collision avec elle.
Les chutes réelles ont aussi une vitesse maximale. Limite la vitesse avec min :
MAX_FALL = 12
# dans la boucle
vel_y = min(vel_y + GRAVITY, MAX_FALL)min renvoie le plus petit de ses deux nombres, donc la vitesse augmente de 1 par image jusqu’à atteindre 12, puis reste à cette valeur. Un saut commence à -15, en dessous de cette limite, donc les sauts ne changent pas.
Douze correspond au tiers d’une tuile : quel que soit l’objet sur lequel le joueur tombe, il y aura une image où il entre en collision avec lui, et le test d’atterrissage pourra le détecter.
Défi
Facile- Ajoute
MAX_FALL = 12en haut. - Remplace
vel_y += GRAVITYparvel_y = min(vel_y + GRAVITY, MAX_FALL).
Le joueur commence dans les airs, afin que tu puisses le voir atteindre la vitesse maximale.
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("Falling Speed")
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
elif event.type == pygame.KEYUP and event.key in (pygame.K_SPACE, pygame.K_UP):
if vel_y < -4:
vel_y = -4
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()
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