Vom Original aus drehen
Teil des Abschnitts Sprites und Bilder der Pygame-Journey von Coddy. Lektion 9 von 36.
Ein Stachelball, der sich ständig dreht, dreht sich in jedem Frame ein wenig weiter. Es gibt eine verlockende Möglichkeit, ihn zu programmieren, aber sie führt zu Problemen:
ball = pygame.transform.rotate(ball, 2) # falschIn jedem Frame wird das zuletzt gedrehte Bild weitergedreht. Bei jeder Drehung kommt ein durchsichtiger Rand hinzu, sodass die Surface pro Frame um etwa 3 Prozent wächst: Nach einer halben Sekunde ist sie doppelt so groß, nach zwei Sekunden fast 1.800 Pixel breit. Außerdem verschmieren die Pixel mit jeder Drehung ein wenig mehr. Das Spiel wird bald quälend langsam.
Behalte stattdessen das Original und den Winkel und erzeuge in jedem Frame das gedrehte Bild aus dem Original:
angle += 2
spun = pygame.transform.rotate(ball, angle)
screen.blit(spun, spun.get_rect(center=(320, 240)))Jetzt weicht spun unabhängig vom Winkel nur um eine Drehung von der Datei ab: Es ist nie größer als 67 mal 67 Pixel und nie unschärfer als nach einer Drehung. Dieselbe Regel gilt für jede Transformation: Arbeite mit dem Original, nicht mit der letzten Kopie.
Aufgabe
Mittel- Lege vor der Schleife
angle = 0fest. - Addiere in jedem Frame 2 zu
angle. - Drehe das ursprüngliche
ballumangleund zeichne das Ergebnis mit seinem Mittelpunkt bei(320, 240). Ändere niemalsballselbst.
Probier es selbst
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Spinning Spikes")
clock = pygame.time.Clock()
ball = pygame.image.load("assets/images/spike_ball.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(ball, ball.get_rect(center=(320, 240)))
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