Saltos cortos
Parte de la sección Mundos del Journey de Pygame de Coddy. Lección 12 de 35.
En la mayoría de los juegos de plataformas, una pulsación rápida produce un pequeño salto y una pulsación prolongada, un salto completo. Esto permite al jugador elegir la altura de cada salto.
Cuando se suelta la tecla de salto, llega un evento KEYUP. Si el jugador todavía está subiendo rápidamente, ralentiza el ascenso:
elif event.type == pygame.KEYUP and event.key in (pygame.K_SPACE, pygame.K_UP):
if vel_y < -4:
vel_y = -4Si se mantiene pulsada la tecla, nunca se envía KEYUP durante el ascenso, así que el salto alcanza toda su altura. Al tocar la tecla, el evento se envía un fotograma después, la velocidad baja a -4 y la gravedad hace que el jugador cambie de dirección unos fotogramas más tarde.
La condición vel_y < -4 es importante. Cerca del punto más alto o mientras cae, vel_y es mayor que -4, y establecerlo en -4 en ese momento impulsaría al jugador de nuevo hacia arriba.
Desafío
Fácil- Al producirse un
KEYUPde la tecla Espacio o Flecha arriba, cuandovel_ysea menor que -4, establecevel_y = -4. - Deja el salto con
KEYDOWNtal como está.
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("Short Hops")
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
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()
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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