Girar a partir do original
Parte da seção Sprites e imagens do Journey de Pygame da Coddy. Lição 9 de 36.
Uma bola com espinhos que gira o tempo todo dá uma pequena volta a cada quadro. Há uma maneira tentadora de escrevê-la, mas ela dá errado:
ball = pygame.transform.rotate(ball, 2) # erradoA cada quadro, a última imagem girada é girada novamente. Cada rotação acrescenta uma borda transparente, então a Surface aumenta cerca de 3 por cento por quadro: fica com o dobro do tamanho depois de meio segundo e quase 1.800 pixels de largura depois de dois segundos. Os pixels também ficam um pouco mais borrados a cada giro. O jogo logo fica lento demais para jogar.
Em vez disso, mantenha o original e o ângulo, e crie a imagem girada a partir do original a cada quadro:
angle += 2
spun = pygame.transform.rotate(ball, angle)
screen.blit(spun, spun.get_rect(center=(320, 240)))Agora, spun está a uma rotação de distância do arquivo, qualquer que seja o ângulo: nunca passa de 67 por 67 pixels e nunca fica mais borrada do que após um giro. A mesma regra vale para toda transformação: trabalhe a partir do original, não da última cópia.
Desafio
Médio- Antes do loop, faça
angle = 0. - A cada quadro, adicione 2 a
angle. - Gire o
balloriginal emanglee desenhe o resultado com seu centro em(320, 240). Nunca altere o próprioball.
Experimente você mesmo
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()
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
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