Velocidad máxima de caída
Parte de la sección Mundos del Journey de Pygame de Coddy. Lección 13 de 35.
La gravedad sigue aumentando la velocidad de caída. Si caes desde una altura suficiente, el jugador se mueve 30 o 40 píxeles en un solo fotograma. Una baldosa tiene 36 píxeles de alto, así que a esa velocidad el jugador puede atravesar una plataforma entre dos fotogramas, sin llegar a superponerse con ella.
Las caídas reales también tienen una velocidad máxima. Limita la velocidad con min:
MAX_FALL = 12
# en el bucle
vel_y = min(vel_y + GRAVITY, MAX_FALL)min devuelve el menor de sus dos números, así que la velocidad aumenta en 1 por fotograma hasta llegar a 12 y después se mantiene ahí. Un salto empieza en -15, por debajo del límite, así que los saltos no cambian.
Doce es un tercio de una baldosa: sea cual sea la superficie sobre la que caiga el jugador, habrá algún fotograma en el que se superponga con ella y la comprobación del aterrizaje podrá detectarlo.
Desafío
Fácil- Añade
MAX_FALL = 12al principio. - Reemplaza
vel_y += GRAVITYporvel_y = min(vel_y + GRAVITY, MAX_FALL).
El jugador empieza en el aire, así que puedes verlo alcanzar la velocidad máxima.
Pruébalo tú mismo
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()
Todas las lecciones de Mundos
1Mapas a partir de texto
Un nivel en textoFilas y columnasLetras con significadoDónde empieza el jugadorUna pantalla a la vez4Colisiones con plataformas
Paredes a izquierda y derechaAterrizar en plataformasGolpearse la cabezaCaer fuera del nivelUn eje a la vez5Una cámara con desplazamiento
Un desplazamiento de cámaraSeguir al jugadorMantener la cámara dentroParalaje3Gravedad y salto
Caer con gravedadSaltar desde el sueloSaltos cortosVelocidad máxima de caídaBuffer de salto6Enemigos que patrullan
Un blob patrulleroPisa o recibe un golpeUn ciclo de caminataEnemigos desde el mapaPractica por tu cuenta: Playground de Pygame