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().
Thử thách
DễPhủ kín cửa sổ bằng các ô hình bầu trời.
- Sau
set_mode, tảiassets/backgrounds/sky.pngbằng.convert()vàotile. - Thay
screen.fill(...)bằng hai vòng lặp (loop), dùngtileđể vẽ tại mọi vị trí(x, y), với x trongrange(0, 640, 72)và y trongrange(0, 480, 72). - 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
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