Menu
CoddyTech

Thu phóng hình ảnh

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

Trùm trong màn chơi cần trông thật lớn, còn bộ đếm mạng cần những con tàu nhỏ. Cùng một tệp có thể làm được cả hai việc: phóng to hoặc thu nhỏ sẽ tạo ra một bản sao với kích thước đã thay đổi.

boss = pygame.transform.scale_by(boss, 2)
icon = pygame.transform.scale(ship, (32, 32))

scale_by(image, 2) nhân cả hai chiều với 2: con trùm kích thước 64 x 64 sẽ thành 128 x 128. scale(image, (w, h)) tạo ảnh có kích thước chính xác là w x h pixel, kể cả khi ảnh bị kéo giãn.

Thao tác thay đổi kích thước chậm hơn blit, và mỗi bản sao mới lại làm các pixel mờ hoặc vỡ nét thêm một chút. Chỉ thay đổi kích thước một lần, trước vòng lặp, từ tệp gốc, rồi vẽ bản sao đã thay đổi kích thước ở mỗi khung hình.

Hãy tạo Rect sau khi thay đổi kích thước. Rect tạo từ ảnh kích thước 64 x 64 sẽ giữ kích thước cũ, còn center=(320, 150) sẽ đặt con trùm lớn lệch khỏi tâm.

challenge icon

Thử thách

Dễ

Vẽ một trùm lớn và ba biểu tượng tàu nhỏ.

  1. Trước vòng lặp, phóng to trùm lên 2 lần, rồi tạo boss_rect từ hình ảnh đã phóng to, căn giữa tại (320, 150).
  2. Tạo icon: tàu được thu nhỏ thành (32, 32).
  3. Vẽ icon với góc trên bên trái tại (10, 10), (50, 10) và (90, 10).

Nhấn “Chơi”: một trùm lớn và ba tàu nhỏ ở góc trên bên 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("Boss Fight")
clock = pygame.time.Clock()

boss = pygame.image.load("assets/images/boss.png").convert_alpha()
boss_rect = boss.get_rect(center=(320, 150))
ship = pygame.image.load("assets/images/ship.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(boss, boss_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