Menu
CoddyTech

Quay mặt theo hướng bay

Thuộc phần Sprite và hình ảnh trong hành trình Pygame của Coddy. Bài học 7 trên 39.

Tàu hướng lên trong tệp ảnh. Khi xoay bằng rotate(ship, -90), tàu sẽ hướng sang phải, phù hợp với hướng bay ngang. Khi bay sang trái, tàu nên hướng sang trái.

pygame.transform.flip(image, flip_x, flip_y) tạo một bản sao lật gương. True, False lật từ trái sang phải; False, True lật từ trên xuống dưới.

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

Cả hai hình đều được tạo một lần, trước vòng lặp. Sau đó, trò chơi lưu hình cần hiển thị vào một biến, và các phím sẽ thay đổi biến đó:

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

Vẽ image ở mỗi khung hình. Khi không có phím nào được nhấn, image giữ nguyên giá trị gần nhất, nên tàu tiếp tục hướng về phía nó đã bay lần cuối.

challenge icon

Thử thách

Trung bình

Cho tàu quay về hướng nó bay.

  1. Trước vòng lặp, tạo ship_left bằng cách lật ship_right theo chiều ngang, rồi đặt image = ship_right.
  2. Giữ phím mũi tên trái thì đặt image = ship_left; giữ phím mũi tên phải thì đặt image = ship_right.
  3. Vẽ image tại ship_rect.

Nhấn Chơi và bay sang trái: tàu quay mặt sang trái. Sau đó nhấn Kiểm tra.

Tự làm thử

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()

Tất cả bài học trong Sprite và hình ảnh

Tự luyện tập: Playground Pygame