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.
Défi
Moyen- Avant la boucle, définis
angle = 0. - À chaque image, ajoute 2 à
angle. - Fais pivoter le
balloriginal deangleet dessine le résultat avec son centre en(320, 240). Ne modifie jamaisballlui-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()
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
1Charger des images
Charger une imageLa placer avec un rectangleDéplacer l’imageRépéter un arrière-planPixels transparents2Tourner, retourner, redimensionner
Faire pivoter autour du centreRegarder dans la direction du volRedimensionner une imagePivoter à partir de l’original5Collisions au pixel près
Les rectangles semblent injustesMasquesSprites au pixel prèsZones de collision circulaires3Les classes pour les objets du jeu
Votre première classeLes méthodesSelf est l’objetUne liste d’objetsDes objets avec des imagesUne sous-classe6Animation à partir de feuilles de sprites
Découper une feuille de spritesUn compteur de framesAnimer avec le tempsUne explosion à déclenchement uniqueEntraînez-vous par vous-même : Playground Pygame