Menu
CoddyTech

Saltar

Parte de la sección Reglas del juego del Journey de Pygame de Coddy. Lección 24 de 29.

Un salto es una velocidad hacia arriba que la gravedad va eliminando. Dale al corredor una velocidad vertical, vy. En cada fotograma, la gravedad le suma 1 y el corredor se mueve esa distancia:

def update(self):
    self.vy += GRAVITY
    self.rect.y += self.vy
    if self.rect.bottom >= GROUND_Y:
        self.rect.bottom = GROUND_Y
        self.vy = 0

y crece hacia abajo, así que para saltar se establece vy = -16: el corredor sube 15 píxeles, después 14 y después 13, se ralentiza hasta detenerse a unos 120 píxeles de altura y vuelve a caer cada vez más rápido. Cuando llega a la línea del suelo, se coloca sobre ella y se detiene.

Salta solo desde el suelo. Sin esa comprobación, cada pulsación en el aire iniciaría un nuevo salto y el corredor podría subir para siempre:

def jump(self):
    if self.rect.bottom == GROUND_Y:
        self.vy = -16

La sección 5 amplía esto con plataformas sobre las que aterrizar.

challenge icon

Desafío

Intermedio
  1. Añade GRAVITY = 1 y self.vy = 0 al corredor.
  2. Escribe update() como se muestra y llama a runner.update() en cada fotograma, antes de dibujar.
  3. Escribe jump(): vy = -16, solo cuando el corredor esté en el suelo.
  4. La tecla Espacio o la flecha Arriba llama a runner.jump().

Pruébalo tú mismo

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 320))
pygame.display.set_caption("Sky Runner")
clock = pygame.time.Clock()

SKY = (140, 200, 240)
GROUND = (90, 160, 80)
GROUND_Y = 260


class Runner(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("assets/images/player.png").convert_alpha()
        self.rect = self.image.get_rect(midbottom=(100, GROUND_Y))


runner = Runner()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill(SKY)
    pygame.draw.rect(screen, GROUND, (0, GROUND_Y, 640, 60))
    screen.blit(runner.image, runner.rect)
    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 Reglas del juego

Practica por tu cuenta: Playground de Pygame