Menu
CoddyTech

Ein fallender Block

Teil des Abschnitts Die Spielschleife der Pygame-Journey von Coddy. Lektion 24 von 32.

Etwas, das fällt, ist etwas, dessen y-Wert mit jedem Frame wächst. Mach auch den Block zu einem Rect und erhöhe sein y in jedem Schleifendurchlauf:

block = pygame.Rect(220, 0, 20, 20)

while running:
    # Ereignisse und Tasten
    block.y += 3
    # füllen, zeichnen

Bei 60 Frames pro Sekunde entsprechen 3 Pixel pro Frame 180 Pixeln pro Sekunde. Das Fenster ist 360 Pixel hoch, also braucht der Block zwei Sekunden, um den unteren Rand zu erreichen.

Dieses Spiel bewegt sich frameweise, wie Move a Square, nicht anhand von dt. Ein Rect speichert nur ganze Zahlen, daher würde ein Schritt von beispielsweise 0.6 Pixeln auf 0 abgerundet, und das Rect würde sich nie bewegen. Spiele, die Rects zeitbasiert bewegen, speichern die Position in einem Vector2 und übertragen sie in das Rect.

Der Block fällt weiter, nachdem er das Fenster verlassen hat. Noch hält ihn nichts auf; in der nächsten Lektion wird er zurückgebracht.

challenge icon

Aufgabe

Einfach
  1. Erstelle unter dem Korb block = pygame.Rect(220, 0, 20, 20).
  2. Füge in der Schleife nach der Bewegung des Korbs 3 zu block.y hinzu.
  3. Zeichne den Block nach dem Korb in Rot (235, 80, 80).

Probier es selbst

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()

basket = pygame.Rect(200, 330, 80, 16)

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]:
        basket.x -= 8
    if keys[pygame.K_RIGHT]:
        basket.x += 8
    basket.clamp_ip(screen.get_rect())

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Alle Lektionen in Die Spielschleife

Übe selbstständig: Pygame-Playground