Menu
CoddyTech

Ruotare dall'originale

Fa parte della sezione Sprite e immagini del percorso Pygame di Coddy. Lezione 9 di 36.

Una palla chiodata che gira continuamente ruota un po' a ogni fotogramma. C'è un modo allettante per scriverlo, ma non funziona:

ball = pygame.transform.rotate(ball, 2)  # sbagliato

A ogni fotogramma si ruota l'immagine già ruotata. Ogni rotazione aggiunge un bordo trasparente, quindi la Surface cresce di circa il 3 percento a ogni fotogramma: raddoppia le dimensioni dopo mezzo secondo e raggiunge quasi 1.800 pixel di larghezza dopo due secondi. Anche i pixel diventano un po' più sfocati a ogni rotazione. Ben presto il gioco rallenta fino quasi a fermarsi.

Conserva invece l'originale e l'angolo, e crea l'immagine ruotata dall'originale a ogni fotogramma:

angle += 2
spun = pygame.transform.rotate(ball, angle)
screen.blit(spun, spun.get_rect(center=(320, 240)))

Ora spun è sempre una sola rotazione distante dal file, qualunque sia l'angolo: non supera mai 67 per 67 pixel e non è mai più sfocata di quanto lo sia dopo una rotazione. La stessa regola vale per ogni trasformazione: parti dall'originale, non dall'ultima copia.

challenge icon

Sfida

Medio
  1. Prima del ciclo, imposta angle = 0.
  2. A ogni fotogramma, aggiungi 2 a angle.
  3. Ruota ball originale di angle e disegna il risultato con il centro in (320, 240). Non modificare mai ball.

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Sprite e immagini

Esercitati da solo: Playground Pygame