Menu
CoddyTech

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 = -4

Si 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.

challenge icon

Desafío

Fácil
  1. Al producirse un KEYUP de la tecla Espacio o Flecha arriba, cuando vel_y sea menor que -4, establece vel_y = -4.
  2. Deja el salto con KEYDOWN tal 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()
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Mundos

Practica por tu cuenta: Playground de Pygame