Menu
CoddyTech

Apuntar en la dirección del vuelo

Parte de la sección Sprites e imágenes del Journey de Pygame de Coddy. Lección 7 de 36.

La nave apunta hacia arriba en su archivo. Al girarla con rotate(ship, -90), apunta hacia la derecha, lo que resulta adecuado para una nave que vuela de lado. Cuando vuela hacia la izquierda, debería apuntar hacia la izquierda.

pygame.transform.flip(image, flip_x, flip_y) te da una copia reflejada. True, False la refleja de izquierda a derecha; False, True la refleja de arriba abajo.

ship_right = pygame.transform.rotate(ship, -90)
ship_left = pygame.transform.flip(ship_right, True, False)

Ambas imágenes se crean una sola vez, antes del bucle. Después, el juego recuerda cuál debe mostrar en una variable, y las teclas la cambian:

if keys[pygame.K_LEFT]:
    ship_rect.x -= 5
    image = ship_left

Dibuja image en cada fotograma. Cuando no se mantiene pulsada ninguna tecla, image conserva su último valor, así que la nave sigue mirando hacia la dirección en la que voló por última vez.

challenge icon

Desafío

Intermedio
  1. Antes del bucle, crea ship_left: ship_right volteado de izquierda a derecha.
  2. Antes del bucle, establece image = ship_right.
  3. Al mantener pulsada la tecla izquierda, se establece image = ship_left; al mantener pulsada la tecla derecha, se establece image = ship_right. El movimiento permanece igual.
  4. Dibuja image en ship_rect.

Pruébalo tú mismo

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Face the Way You Fly")
clock = pygame.time.Clock()

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

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

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        ship_rect.x -= 5
    if keys[pygame.K_RIGHT]:
        ship_rect.x += 5
    ship_rect.clamp_ip(screen.get_rect())

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

pygame.quit()
quiz iconPonte a prueba

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

Practica por tu cuenta: Playground de Pygame