Menu
CoddyTech

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)  # errado

A 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.

challenge icon

Desafio

Médio
  1. Antes do loop, faça angle = 0.
  2. A cada quadro, adicione 2 a angle.
  3. Gire o ball original em angle e desenhe o resultado com seu centro em (320, 240). Nunca altere o próprio ball.

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()
quiz iconTeste seus conhecimentos

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

Pratique por conta própria: Playground de Pygame