Anime com o tempo
Parte da seção Sprites e imagens do Journey de Pygame da Coddy. Lição 27 de 36.
Um contador de quadros vincula a animação à taxa de quadros. Em um computador que só consegue renderizar 30 quadros por segundo, as asas do inseto batem na metade da velocidade. Vincule-a ao tempo em vez disso.
pygame.time.get_ticks() é o número de milissegundos desde pygame.init(). Divida pelo tempo que cada imagem deve durar e você terá quantas imagens já passaram; % transforma isso em um índice:
frame_index = pygame.time.get_ticks() // 120 % len(frames)De 0 a 119 ms, essa é a imagem 0; de 120 a 239 ms, a imagem 1; depois, 2 e, então, 0 novamente. Não há contador para manter e reiniciar: uma linha, calculada do zero a cada quadro. Se o jogo ficar mais lento, a animação pula uma imagem em vez de ficar mais lenta junto.
// divide e descarta o resto: 250 // 120 é 2. A terceira linha desta folha contém um inseto voando em três poses, nas colunas 6 a 8, já recortadas em frames.
Desafio
Médio- Remova
timere o contador. - A cada quadro, defina
frame_indexcom base empygame.time.get_ticks()para que cada uma das três imagens seja exibida por 120 milissegundos, em ordem.
Experimente você mesmo
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()
Todas as lições de Sprites e imagens
1Carregando imagens
Carregue uma imagemPosicione-a com um RectMova a imagemLadrilhe o plano de fundoPixels transparentes2Girar, Inverter, Redimensionar
Girar em torno do centroFicar de frente para a direção do vooRedimensionar uma imagemGirar a partir do original3Classes para Objetos de Jogos
Sua primeira classeMétodosSelf é o objetoUma lista de objetosObjetos com imagensUma subclasse6Animação com Sprite Sheets
Recorte uma Sprite SheetUm contador de quadrosAnime com o tempoUma explosão de disparo únicoPratique por conta própria: Playground de Pygame