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ị đó.
Thử thách
Trung bìnhXoay con tàu tại chỗ bằng các phím mũi tên.
- Trước vòng lặp, đặt
angle = 0. - Giữ phím Left để tăng
anglethêm 3 mỗi khung hình; giữ phím Right để giảm 3. - Mỗi khung hình, xoay
shiptheoanglevà 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
5Va chạm chính xác đến từng pixel
Hình chữ nhật thật bất côngMặt nạSprite chính xác đến từng pixelVùng va chạm hình tròn3Lớp cho đối tượng trong trò chơi
Lớp đầu tiên của bạnPhương thứcSelf là đối tượngDanh sách đối tượngĐối tượng có hình ảnhDanh sách kẻ địchLớp con6Hoạt ảnh từ sprite sheet
Cắt sprite sheetBộ đếm khung hìnhTạo hoạt ảnh theo thời gianHiệu ứng nổ chỉ chạy một lầnTự luyện tập: Playground Pygame