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 = -4Bei 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.
Aufgabe
Einfach- Bei einem
KEYUPder Leertaste oder der Pfeiltaste nach oben: Wennvel_ykleiner als -4 ist, setzevel_y = -4. - Lass den Sprung bei
KEYDOWNunverä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()
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Spielwelten
1Karten aus Text
Ein Level in TextformZeilen und SpaltenBuchstaben mit BedeutungWo der Spieler startetEin Bildschirm nach dem anderen4Kollisionen mit Plattformen
Wände links und rechtsAuf Plattformen landenStoß dir den KopfAus dem Level fallenEine Achse nach der anderen3Schwerkraft und Springen
Fallen mit SchwerkraftVom Boden springenKurze SprüngeEine maximale FallgeschwindigkeitSprungpuffer6Patrouillierende Gegner
Ein patrouillierender BlobDrauftreten oder getroffen werdenEin GehzyklusGegner aus der KarteÜbe selbstständig: Pygame-Playground