Girar desde la imagen original
Parte de la sección Sprites e imágenes del Journey de Pygame de Coddy. Lección 9 de 36.
Una bola con pinchos que gira todo el tiempo rota un poco en cada fotograma. Hay una forma tentadora de escribirlo, pero falla:
ball = pygame.transform.rotate(ball, 2) # incorrectoEn cada fotograma se rota la imagen rotada anterior. Cada rotación añade un borde transparente, así que la Surface crece aproximadamente un 3 por ciento por fotograma: duplica su tamaño después de medio segundo y alcanza casi 1.800 píxeles de ancho después de dos segundos. Los píxeles también se difuminan un poco más con cada rotación. El juego pronto se ralentiza hasta casi detenerse.
Conserva el original y el ángulo, y crea la imagen rotada a partir del original en cada fotograma:
angle += 2
spun = pygame.transform.rotate(ball, angle)
screen.blit(spun, spun.get_rect(center=(320, 240)))Ahora spun está a una rotación del archivo original, cualquiera que sea el ángulo: nunca mide más de 67 por 67 píxeles ni queda más borrosa que tras una sola rotación. La misma regla se aplica a todas las transformaciones: trabaja a partir del original, no de la última copia.
Desafío
Intermedio- Antes del bucle, establece
angle = 0. - En cada fotograma, suma 2 a
angle. - Gira el
balloriginal enangley dibuja el resultado con su centro en(320, 240). Nunca cambiesball.
Pruébalo tú mismo
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 lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Sprites e imágenes
1Cargar imágenes
Cargar una imagenColocarla con un rectánguloMover la imagenRepetir un fondo en mosaicoPíxeles transparentes2Girar, voltear y escalar
Girar alrededor del centroApuntar en la dirección del vueloEscalar una imagenGirar desde la imagen original5Colisiones precisas a nivel de píxel
Los rectángulos parecen injustosMáscarasSprites precisos a nivel de píxelHitboxes circulares3Clases para objetos del juego
Tu primera claseMétodosSelf es el objetoUna lista de objetosObjetos con imágenesUna subclase6Animación con hojas de sprites
Recortar una hoja de spritesUn contador de fotogramasAnimar con el tiempoUna explosión de una sola vezPractica por tu cuenta: Playground de Pygame