Vom Boden springen
Teil des Abschnitts Spielwelten der Pygame-Journey von Coddy. Lektion 11 von 35.
Ein Sprung ist eine negative Geschwindigkeit. Setze vel_y = -15, und der Spieler bewegt sich 15 Pixel nach oben; die Schwerkraft zieht in jedem Frame 1 ab, bis er wieder fällt. Dadurch entsteht der Bogen.
Ein Sprung sollte nur vom Boden aus beginnen. Verwende ein Flag, das angibt, ob der Spieler in diesem Frame auf dem Boden stand:
vel_y += GRAVITY
player.y += vel_y
on_ground = False
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0
on_ground = TrueVerwende das KEYDOWN-Ereignis für den Sprung, damit ein Tastendruck einem Sprung entspricht, unabhängig davon, ob die Taste gehalten wird oder nicht:
elif event.type == pygame.KEYDOWN and event.key in (pygame.K_SPACE, pygame.K_UP):
if on_ground:
vel_y = JUMPevent.key in (pygame.K_SPACE, pygame.K_UP) ist für beide Tasten True. In der Luft ist on_ground False, daher bewirkt ein zweiter Tastendruck nichts.
Aufgabe
Mittel- Füge oben
JUMP = -15und vor der Spielschleifeon_ground = Falseein. - Setze in jedem Frame vor der Bodenprüfung
on_ground = Falseund innerhalb der Prüfungon_ground = True. - Setze bei einem
KEYDOWNvon Leertaste oder Pfeil nach oben, wennon_groundTrue ist,vel_y = JUMP.
Probier es selbst
import pygame
TILE = 36
FLOOR = 324
GRAVITY = 1
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Gravity")
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
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
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
if player.bottom > FLOOR:
player.bottom = FLOOR
vel_y = 0
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()
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