Menu
CoddyTech

Pivoter à partir de l’original

Fait partie de la section Sprites et images du Journey Pygame de Coddy. Leçon 9 sur 36.

Une balle à pointes qui tourne en permanence pivote un peu à chaque image. Il existe une façon tentante de l’écrire, mais elle pose problème :

ball = pygame.transform.rotate(ball, 2)  # incorrect

À chaque image, on fait pivoter l’image déjà pivotée. Chaque rotation ajoute une bordure transparente, si bien que la Surface grandit d’environ 3 % par image : elle fait deux fois sa taille après une demi-seconde et mesure près de 1 800 pixels de large après deux secondes. Les pixels deviennent aussi un peu plus flous à chaque rotation. Le jeu ralentit bientôt jusqu’à devenir presque inutilisable.

Conservez plutôt l’original et l’angle, puis créez l’image pivotée à partir de l’original à chaque image :

angle += 2
spun = pygame.transform.rotate(ball, angle)
screen.blit(spun, spun.get_rect(center=(320, 240)))

spun ne subit alors qu’une seule rotation à partir du fichier, quel que soit l’angle : ses dimensions ne dépassent jamais 67 sur 67 pixels et son flou ne dépasse jamais celui d’une seule rotation. La même règle s’applique à toutes les transformations : partez de l’original, pas de la dernière copie.

challenge icon

Défi

Moyen
  1. Avant la boucle, définis angle = 0.
  2. À chaque image, ajoute 2 à angle.
  3. Fais pivoter le ball original de angle et dessine le résultat avec son centre en (320, 240). Ne modifie jamais ball lui-même.

Essayez vous-même

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Sprites et images

Entraînez-vous par vous-même : Playground Pygame