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) # sbagliatoA 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.
Sfida
Medio- Prima del ciclo, imposta
angle = 0. - A ogni fotogramma, aggiungi 2 a
angle. - Ruota
balloriginale dianglee disegna il risultato con il centro in(320, 240). Non modificare maiball.
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()
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Sprite e immagini
1Caricare immagini
Caricare un'immaginePosizionarla con un rettangoloSpostare l'immagineRipetere uno sfondoPixel trasparenti2Ruota, capovolgi, ridimensiona
Ruotare attorno al centroRivolgiti nella direzione in cui voliRidimensionare un'immagineRuotare dall'originale3Classi per gli oggetti del gioco
La tua prima classeMetodiSelf è l’oggettoUna lista di oggettiOggetti con immaginiUna sottoclasse6Animazione con gli sprite sheet
Ritagliare uno sprite sheetUn contatore di frameAnimare con il tempoUn’esplosione a riproduzione singolaEsercitati da solo: Playground Pygame