Die Sprite-Klasse
Teil des Abschnitts Sprites und Bilder der Pygame-Journey von Coddy. Lektion 16 von 36.
Jedes Spielobjekt hatte bisher ein Bild, ein Rect, ein update und eine Möglichkeit, gezeichnet zu werden. pygame hat dafür genau die passende Klasse: pygame.sprite.Sprite. Deine Spielobjekte werden zu Unterklassen davon:
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 -= 6Drei Regeln. Rufe zuerst super().__init__() auf: Dadurch wird eingerichtet, was die Sprite-Klasse intern benötigt. Nenne das Bild genau self.image und die Position self.rect: Der Code von pygame selbst liest diese beiden Namen aus. Platziere die Regeln, die für jeden Frame gelten, in update.
Das Schiffsbild wird oben einmal als ship_image geladen und von der Klasse verwendet. Zeichne das Sprite vorerst mit einem Blit: screen.blit(player.image, player.rect). In der nächsten Lektion lässt du pygame es zeichnen.
Aufgabe
Mittel- Schreibe wie oben
class Player(pygame.sprite.Sprite):self.imageistship_image, und die Mitte der Unterkante vonself.rectliegt bei(320, 470). - Die Methode
updatebewegt das Rect mit den Pfeiltasten um 6 Pixel nach links oder rechts und begrenzt es auf das Fenster: Verschiebe die entsprechenden Zeilen aus dem Startercode in diese Methode. - Erstelle
player = Player(), rufe in jedem Frameplayer.update()auf und blitteplayer.imagean der Position vonplayer.rect.
Probier es selbst
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Sprite Ship")
clock = pygame.time.Clock()
ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
ship_rect = ship_image.get_rect(midbottom=(320, 470))
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]:
ship_rect.x -= 6
if keys[pygame.K_RIGHT]:
ship_rect.x += 6
ship_rect.clamp_ip(screen.get_rect())
screen.fill((20, 22, 40))
screen.blit(ship_image, ship_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
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