Menu
CoddyTech

Springen

Teil des Abschnitts Spielregeln der Pygame-Journey von Coddy. Lektion 24 von 29.

Ein Sprung ist eine Aufwärtsgeschwindigkeit, die durch die Schwerkraft abgebaut wird. Gib dem Läufer eine vertikale Geschwindigkeit, vy. In jedem Frame addiert die Schwerkraft 1 dazu, und der Läufer bewegt sich entsprechend:

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 wächst nach unten, deshalb setzt ein Sprung vy = -16: Der Läufer steigt erst 15 Pixel, dann 14, dann 13, wird langsamer, bis er etwa 120 Pixel weiter oben zum Stillstand kommt, und fällt immer schneller zurück. Wenn er die Bodenlinie erreicht, wird er darauf gesetzt und bleibt stehen.

Springe nur vom Boden aus. Ohne diese Prüfung würde jeder Tastendruck in der Luft einen neuen Sprung auslösen, und der Läufer könnte endlos nach oben klettern:

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

Abschnitt 5 baut darauf mit Plattformen zum Landen auf.

challenge icon

Aufgabe

Mittel
  1. Füge dem Läufer GRAVITY = 1 und self.vy = 0 hinzu.
  2. Schreibe update() wie gezeigt und rufe runner.update() in jedem Frame vor dem Zeichnen auf.
  3. Schreibe jump(): vy = -16, aber nur, wenn der Läufer auf dem Boden ist.
  4. Die Leertaste oder die Pfeiltaste nach oben ruft runner.jump() auf.

Probier es selbst

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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Spielregeln

Übe selbstständig: Pygame-Playground