Menu
CoddyTech

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)  # falsch

In 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.

challenge icon

Aufgabe

Mittel
  1. Lege vor der Schleife angle = 0 fest.
  2. Addiere in jedem Frame 2 zu angle.
  3. Drehe das ursprüngliche ball um angle und zeichne das Ergebnis mit seinem Mittelpunkt bei (320, 240). Ändere niemals ball selbst.

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()
quiz iconTeste dich selbst

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

Übe selbstständig: Pygame-Playground