Gruppen
Teil des Abschnitts Sprites und Bilder der Pygame-Journey von Coddy. Lektion 17 von 36.
Sprites treten in großer Zahl auf: Gegner, Laser, Münzen. Eine Group enthält viele Sprites und führt für alle dieselbe Aktion aus:
enemies = pygame.sprite.Group()
for i in range(5):
enemies.add(Enemy(64 + i * 128, 60))Zwei Aufrufe in der Schleife ersetzen die Schleifen, die du über eine Liste geschrieben hast:
enemies.update()
enemies.draw(screen)enemies.update() ruft update() für jeden Sprite in der Gruppe auf. enemies.draw(screen) blitt das self.image jedes Sprites an dessen self.rect: Deshalb müssen diese beiden Namen exakt sein. Ein Sprite in einer Gruppe benötigt keine eigene Zeichenmethode.
Eine Gruppe kennt auch ihre Größe, len(enemies), und du kannst mit for enemy in enemies: über sie iterieren. Zeichne die Gruppe nach dem Füllen, wie jedes andere Bild.
Aufgabe
Mittel- Ersetze
enemydurch eine Gruppe namensenemies, die fünf Enemy-Sprites enthält, zentriert bei x = 64, 192, 320, 448 und 576, alle bei y = 60. - Rufe in jedem Frame
enemies.update()auf. - Zeichne sie nach dem Füllen mit
enemies.draw(screen).
Probier es selbst
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Group")
clock = pygame.time.Clock()
ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
enemy_image = pygame.image.load("assets/images/enemy_red.png").convert_alpha()
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = ship_image
self.rect = self.image.get_rect(midbottom=(320, 470))
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.rect.x -= 6
if keys[pygame.K_RIGHT]:
self.rect.x += 6
self.rect.clamp_ip(screen.get_rect())
class Enemy(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = enemy_image
self.rect = self.image.get_rect(center=(x, y))
def update(self):
self.rect.y += 3
if self.rect.top > 480:
self.rect.bottom = 0
player = Player()
enemy = Enemy(320, 60)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
player.update()
enemy.update()
screen.fill((20, 22, 40))
screen.blit(enemy.image, enemy.rect)
screen.blit(player.image, player.rect)
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 Pixel4Spriters und Gruppen
Die Sprite-KlasseGruppenMit kill() entfernenMit spritecollide abfangenGruppe gegen Gruppe2Drehen, 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