Menu
CoddyTech

Fallen mit Schwerkraft

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

Der Held im Fenster fällt gleichmäßig mit 4 Pixeln pro Frame, wie ein Aufzug. Reale Dinge werden beim Fallen schneller. Speichere die vertikale Geschwindigkeit des Spielers in einer Variable und erhöhe sie in jedem Frame:

vel_y += GRAVITY
player.y += vel_y
if player.bottom > FLOOR:
    player.bottom = FLOOR
    vel_y = 0

vel_y ist die Geschwindigkeit in Pixeln pro Frame; positive Werte bedeuten nach unten. GRAVITY = 1 addiert in jedem Frame eins dazu, sodass der Spieler erst 1, dann 2, dann 3 Pixel fällt und so weiter.

Der Boden ist hier eine Linie bei FLOOR = 324, der Oberkante des Grases. Wenn der Spieler sie überschreitet, setze seinen unteren Rand auf die Linie und halte den Fall an. Im nächsten Kapitel wird diese Linie durch echte Plattformen ersetzt.

Der Spieler ist das Rect des Bildes: player_img.get_rect(topleft=(264, 40)) ist ein 48 mal 48 großes Rect an dieser Stelle, und screen.blit(player_img, player) zeichnet das Bild dort.

challenge icon

Aufgabe

Einfach
  1. Füge oben GRAVITY = 1 und vor der Spielschleife vel_y = 0 hinzu.
  2. Addiere in jedem Frame GRAVITY zu vel_y und anschließend vel_y zu player.y, anstatt player.y += 4.
  3. Wenn player.bottom FLOOR überschreitet, setze player.bottom = FLOOR und vel_y = 0.

Probier es selbst

import pygame

TILE = 36
FLOOR = 324

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

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

    player.y += 4
    if player.bottom > FLOOR:
        player.bottom = FLOOR

    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