Menu
CoddyTech

Eine Liste von Objekten

Teil des Abschnitts Sprites und Bilder der Pygame-Journey von Coddy. Lektion 13 von 36.

Zwei benannte Sterne ergeben noch keinen Himmel. Für vierzig brauchst du eine Liste: Erzeuge die Objekte in einer Schleife und füge jedes einzelne hinzu.

stars = []
for i in range(40):
    x = random.randint(0, 639)
    y = random.randint(0, 479)
    speed = random.randint(1, 3)
    stars.append(Star(x, y, speed))

Dann aktualisiert eine Schleife alle Sterne und eine weitere zeichnet sie alle:

for star in stars:
    star.update()

Innerhalb der for-Schleife ist star der Reihe nach jedes Objekt, sodass star.update() diesen Stern mit seiner eigenen Geschwindigkeit bewegt. Wenn du hundert weitere Sterne hinzufügst, ändert sich nur eine Zahl; der Aktualisierungs- und Zeichencode bleibt gleich.

Erstelle die Liste einmal vor der Spielschleife. Eine Liste, die innerhalb der Schleife erstellt wird, ist jedes Bild eine neue Liste mit neuen Sternen, die alle wieder an ihren Ausgangspositionen sind. Daher bewegt sich nichts jemals.

challenge icon

Aufgabe

Mittel
  1. Füge oben import random hinzu.
  2. Erstelle vor der Schleife stars: eine Liste mit 40 Star-Objekten, jedes mit einem zufälligen x-Wert von 0 bis 639, einem zufälligen y-Wert von 0 bis 479 und einer zufälligen Geschwindigkeit von 1 bis 3.
  3. Aktualisiere in der Schleife jeden Stern in stars und zeichne jeden Stern nach dem Füllen. Entferne slow und fast.

Probier es selbst

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Falling Stars")
clock = pygame.time.Clock()

class Star:
    def __init__(self, x, y, speed):
        self.x = x
        self.y = y
        self.speed = speed

    def update(self):
        self.y += self.speed
        if self.y > 480:
            self.y = 0

    def draw(self, screen):
        pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 4)


slow = Star(200, 0, 1)
fast = Star(440, 0, 3)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    slow.update()
    fast.update()

    screen.fill((20, 22, 40))
    slow.draw(screen)
    fast.draw(screen)
    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 Sprites und Bilder

Übe selbstständig: Pygame-Playground