Ein Sprite Sheet zuschneiden
Teil des Abschnitts Sprites und Bilder der Pygame-Journey von Coddy. Lektion 25 von 36.
Eine Animation besteht aus mehreren Bildern, die nacheinander gezeigt werden. Spiele speichern diese Bilder oft in einer Datei, einem Sprite-Sheet: einem Raster aus kleinen, nebeneinander angeordneten Einzelbildern. Das Starterprojekt zeichnet assets/sheets/platformer_characters.png vollständig, mit 9 Einzelbildern in der Breite und 3 in der Höhe, jedes 24 mal 24 Pixel groß. Die beiden Gehposen der grünen Figur sind die ersten beiden in der oberen Reihe.
sheet.subsurface(rect) gibt dir den Teil des Sheets innerhalb eines Rect als eigenständige Surface zurück, ohne ein Pixel zu kopieren. Einzelbild Nummer col in Zeile row beginnt bei (col * 24, row * 24):
frames = []
for col in (0, 1):
frame = sheet.subsurface((col * 24, 0, 24, 24))
frames.append(pygame.transform.scale_by(frame, 3))24 Pixel sind auf einem 640 mal 480 großen Fenster winzig, daher wird jedes Einzelbild auf 72 mal 72 skaliert. Pixelgrafiken behalten bei einer Skalierung um eine ganze Zahl ihre scharfen Kanten. Schneide die Einzelbilder aus und skaliere sie einmal vor der Schleife, und speichere sie in einer Liste: In den nächsten Lektionen wird anhand des Indexes eines davon ausgewählt.
Aufgabe
Mittel- Erstelle vor der Schleife
frames: die Frames in den Spalten 0 und 1 der obersten Zeile, jeweils 24 × 24 groß und um den Faktor 3 skaliert. - Zeichne statt des gesamten Sheets
frames[0]bei(200, 200)undframes[1]bei(368, 200).
Probier es selbst
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Sprite Sheet")
clock = pygame.time.Clock()
sheet = pygame.image.load("assets/sheets/platformer_characters.png").convert_alpha()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((20, 22, 40))
screen.blit(sheet, (212, 204))
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 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