Animare con il tempo
Fa parte della sezione Sprite e immagini del percorso Pygame di Coddy. Lezione 27 di 36.
Un contatore dei fotogrammi lega l’animazione alla frequenza dei fotogrammi. Su un computer che gestisce solo 30 fotogrammi al secondo, le ali dell’insetto sbattono a metà velocità. Legala invece al tempo.
pygame.time.get_ticks() è il numero di millisecondi trascorsi da pygame.init(). Dividi per quanto dovrebbe durare ogni immagine e ottieni quante immagini sono passate; % lo trasforma in un indice:
frame_index = pygame.time.get_ticks() // 120 % len(frames)Da 0 a 119 ms si vede l’immagine 0, da 120 a 239 ms l’immagine 1, poi la 2 e di nuovo la 0. Non c’è nessun contatore da mantenere e azzerare: una riga, ricalcolata da zero a ogni fotogramma. Se il gioco rallenta, l’animazione salta un’immagine invece di rallentare insieme al gioco.
// divide e scarta il resto: 250 // 120 è 2. La terza riga di questo foglio contiene un insetto volante in tre pose, nelle colonne dalla 6 all’8, già ritagliate in frames.
Sfida
Medio- Rimuovi
timere il contatore. - A ogni fotogramma, imposta
frame_indexusandopygame.time.get_ticks(), in modo che ciascuna delle tre immagini venga mostrata per 120 millisecondi, in ordine.
Provalo tu
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Flying Bug")
clock = pygame.time.Clock()
sheet = pygame.image.load("assets/sheets/platformer_characters.png").convert_alpha()
frames = []
for col in (6, 7, 8):
frame = sheet.subsurface((col * 24, 48, 24, 24))
frames.append(pygame.transform.scale_by(frame, 3))
frame_index = 0
timer = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
timer += 1
if timer == 10:
timer = 0
frame_index = (frame_index + 1) % len(frames)
screen.fill((20, 22, 40))
image = frames[frame_index]
screen.blit(image, image.get_rect(center=(320, 240)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
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