Xoay từ hình ảnh gốc
Thuộc phần Sprite và hình ảnh trong hành trình Pygame của Coddy. Bài học 9 trên 39.
Một quả cầu gai quay liên tục sẽ xoay một chút sau mỗi khung hình. Có một cách viết trông hấp dẫn, nhưng lại gây lỗi:
ball = pygame.transform.rotate(ball, 2) # saiMỗi khung hình xoay hình ảnh đã xoay ở khung hình trước. Mỗi lần xoay lại thêm một viền trong suốt, khiến Surface lớn thêm khoảng 3 phần trăm sau mỗi khung hình: kích thước tăng gấp đôi sau nửa giây, rộng gần 1.800 pixel sau hai giây. Các pixel cũng nhòe thêm một chút sau mỗi lần xoay. Chẳng mấy chốc, trò chơi chạy chậm như rùa bò.
Thay vào đó, hãy giữ lại hình ảnh gốc và góc xoay, rồi tạo hình ảnh đã xoay từ hình gốc sau mỗi khung hình:
angle += 2
spun = pygame.transform.rotate(ball, angle)
screen.blit(spun, spun.get_rect(center=(320, 240)))Giờ đây, spun chỉ được xoay một lần từ tệp gốc, bất kể góc xoay là bao nhiêu: kích thước không bao giờ vượt quá 67 x 67 pixel và hình ảnh không bao giờ nhòe hơn sau một lần xoay. Quy tắc này áp dụng cho mọi phép biến đổi: hãy thao tác trên hình gốc, không phải trên bản sao gần nhất.
Thử thách
Trung bìnhXoay quả bóng gai mà không làm nó to lên.
- Trước vòng lặp, tạo
angle = 0. Mỗi khung hình, tăng giá trị này thêm 2. - Xoay
ballban đầu theoanglerồi vẽ kết quả với tâm tại(320, 240). - Không bao giờ thay đổi chính
ball.
Nhấn Chơi: quả bóng gai xoay và giữ nguyên kích thước. 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("Spinning Spikes")
clock = pygame.time.Clock()
ball = pygame.image.load("assets/images/spike_ball.png").convert_alpha()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((20, 22, 40))
screen.blit(ball, ball.get_rect(center=(320, 240)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
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