Menu
CoddyTech

Kurze Sprünge

Teil des Abschnitts Spielwelten der Pygame-Journey von Coddy. Lektion 12 von 35.

In den meisten Plattformspielen sorgt ein kurzer Tastendruck für einen kleinen Hüpfer und ein langes Drücken für einen vollständigen Sprung. So kann der Spieler die Höhe jedes Sprungs wählen.

Wenn die Sprungtaste losgelassen wird, trifft ein KEYUP-Ereignis ein. Wenn der Spieler noch schnell nach oben steigt, wird der Aufstieg verlangsamt:

elif event.type == pygame.KEYUP and event.key in (pygame.K_SPACE, pygame.K_UP):
    if vel_y < -4:
        vel_y = -4

Bei gedrückter Taste wird während des Aufstiegs niemals KEYUP gesendet, daher erreicht der Sprung seine volle Höhe. Bei einem kurzen Tastendruck wird das Ereignis einen Frame später gesendet, die Geschwindigkeit sinkt auf -4, und die Schwerkraft kehrt die Bewegungsrichtung des Spielers einige Frames später um.

Die Prüfung vel_y < -4 ist wichtig. Nahe dem höchsten Punkt oder während des Fallens ist vel_y größer als -4, und würde man es dort auf -4 setzen, würde der Spieler wieder nach oben gestoßen.

challenge icon

Aufgabe

Einfach
  1. Bei einem KEYUP der Leertaste oder der Pfeiltaste nach oben: Wenn vel_y kleiner als -4 ist, setze vel_y = -4.
  2. Lass den Sprung bei KEYDOWN unverändert.

Probier es selbst

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 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 Spielwelten

Übe selbstständig: Pygame-Playground