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.
Aufgabe
Mittel- Füge oben
import randomhinzu. - 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. - Aktualisiere in der Schleife jeden Stern in
starsund zeichne jeden Stern nach dem Füllen. Entferneslowundfast.
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()
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
1Bilder laden
Ein Bild ladenMit einem Rect platzierenDas Bild bewegenEinen Hintergrund kachelnTransparente Pixel2Drehen, Spiegeln, Skalieren
Um den Mittelpunkt drehenIn Flugrichtung ausrichtenEin Bild skalierenVom Original aus drehen3Klassen für Spielobjekte
Deine erste KlasseMethodenSelf ist das ObjektEine Liste von ObjektenObjekte mit BildernEine Unterklasse6Animation mit Sprite Sheets
Ein Sprite Sheet zuschneidenEin Frame-ZählerMit Zeit animierenEine einmalige ExplosionÜbe selbstständig: Pygame-Playground