Menu
CoddyTech

Faire pivoter autour du centre

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

Un vaisseau qui tourne a besoin d’une image tournée. pygame.transform.rotate(image, angle) te donne une nouvelle Surface : l’image tournée de angle degrés dans le sens antihoraire. Un angle négatif la tourne dans le sens horaire. L’image d’origine ne change pas.

Un carré tourné ne tient pas dans un carré de la même taille, donc la nouvelle Surface est plus grande : le vaisseau tourné de 45 degrés mesure 90 sur 90 pixels. Si tu l’affiches à l’ancien coin supérieur gauche, son milieu se déplace vers le bas et vers la droite ; la rotation fait tanguer le vaisseau dans la fenêtre.

Garde plutôt le milieu à la même place. Demande à l’image tournée un Rect centré sur le même point :

rotated = pygame.transform.rotate(ship, angle)
rotated_rect = rotated.get_rect(center=(320, 240))
screen.blit(rotated, rotated_rect)

Tourne le ship d’origine de la valeur complète de angle à chaque image. La direction du vaisseau est le nombre contenu dans angle, et l’image est créée à partir de cette valeur.

challenge icon

Défi

Moyen
  1. Avant la boucle, définis angle = 0.
  2. Maintenir la flèche gauche ajoute 3 à angle à chaque image (dans le sens antihoraire) ; maintenir la flèche droite en soustrait 3.
  3. À chaque image, fais pivoter ship de angle et dessine le résultat avec son centre en (320, 240).

Essayez vous-même

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Turn the Ship")
clock = pygame.time.Clock()

ship = pygame.image.load("assets/images/ship.png").convert_alpha()
ship_rect = ship.get_rect(center=(320, 240))

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((20, 22, 40))
    screen.blit(ship, ship_rect)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Toutes les leçons de Sprites et images

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