Menu
CoddyTech

Lặp ảnh nền

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

Một màu trơn khiến bầu trời trông tẻ nhạt. assets/backgrounds/sky.png là ảnh kích thước 72 x 72 được tạo để lặp lại: đặt các bản sao cạnh nhau, các cạnh sẽ nối liền mà không để lại đường nối. Phủ kín cửa sổ bằng các bản sao của một ảnh nhỏ được gọi là lát kín.

Hai vòng lặp sẽ tạo ra mọi góc trên cùng bên trái, lần lượt từng hàng của lưới:

for x in range(0, 640, 72):
    for y in range(0, 480, 72):
        screen.blit(tile, (x, y))

range(0, 640, 72) tạo ra 0, 72, 144 và cứ thế tiếp tục đến 576. Bản sao ở vị trí 576 kéo dài đến 648, vượt quá mép cửa sổ: pygame vẽ phần nằm trong cửa sổ và bỏ qua phần còn lại, nên cột cuối được cắt gọn gàng.

Các ô phủ kín toàn bộ cửa sổ, nên chúng thay thế screen.fill: vẽ chúng trước, rồi vẽ mọi thứ khác lên trên. Ảnh này không có điểm ảnh trong suốt, nên hãy tải ảnh bằng .convert(), phiên bản dành cho ảnh đục của convert_alpha().

challenge icon

Thử thách

Dễ

Phủ kín cửa sổ bằng các ô hình bầu trời.

  1. Sau set_mode, tải assets/backgrounds/sky.png bằng .convert() vào tile.
  2. Thay screen.fill(...) bằng hai vòng lặp (loop), dùng tile để vẽ tại mọi vị trí (x, y), với x trong range(0, 640, 72) và y trong range(0, 480, 72).
  3. Tiếp tục vẽ con tàu sau các ô nền.

Nhấn Chơi: bầu trời dạng ô phía sau con tàu. 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("Sky Tiles")
clock = pygame.time.Clock()

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(ship, (288, 360))
    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