Menu
CoddyTech

Xoay quanh tâm

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

Một con tàu đang quay cần hình ảnh cũng quay theo. pygame.transform.rotate(image, angle) tạo một Surface mới: hình ảnh quay ngược chiều kim đồng hồ một góc angle độ. Góc âm sẽ làm hình ảnh quay theo chiều kim đồng hồ. Hình ảnh gốc không thay đổi.

Hình vuông sau khi quay không thể nằm gọn trong một hình vuông cùng kích thước, nên Surface mới sẽ lớn hơn: con tàu quay 45 độ có kích thước 90 x 90 pixel. Nếu vẽ nó tại góc trên bên trái cũ, tâm của nó sẽ dịch xuống dưới và sang phải; khi quay, con tàu sẽ lắc lư quanh cửa sổ.

Thay vào đó, hãy giữ nguyên vị trí tâm. Yêu cầu hình ảnh đã quay tạo một Rect có tâm tại cùng điểm:

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

Quay ship gốc theo toàn bộ giá trị angle ở mỗi khung hình. Hướng của con tàu là con số trong angle, và hình ảnh được tạo dựa trên giá trị đó.

challenge icon

Thử thách

Trung bình

Xoay con tàu tại chỗ bằng các phím mũi tên.

  1. Trước vòng lặp, đặt angle = 0.
  2. Giữ phím Left để tăng angle thêm 3 mỗi khung hình; giữ phím Right để giảm 3.
  3. Mỗi khung hình, xoay ship theo angle và vẽ kết quả sao cho tâm nằm ở (320, 240).

Nhấn Chơi và giữ phím Left: con tàu sẽ xoay tại chỗ. 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("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()

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

Tự luyện tập: Playground Pygame