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, zeichnenBei 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.
Aufgabe
Einfach- Erstelle unter dem Korb
block = pygame.Rect(220, 0, 20, 20). - Füge in der Schleife nach der Bewegung des Korbs 3 zu
block.yhinzu. - 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
2Formen und Farben
Kreise, Linien, VieleckeUmrisse und EckenEine Szene aus FormenFarben, die sich ändern5Fang die Blöcke
Der KorbEin fallender BlockÜbe selbstständig: Pygame-Playground