Menu
CoddyTech

Замостить фон

Часть раздела Спрайты и изображения путешествия по Pygame на Coddy. Урок 4 из 36.

Однотонный цвет делает небо скучным. assets/backgrounds/sky.png — это изображение размером 72 на 72 пикселя, созданное для повторения: поставьте копии рядом, и края соединятся без шва. Покрытие окна копиями одного небольшого изображения называется замощением.

Два цикла задают каждый верхний левый угол, проходя по одной строке сетки за раз:

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

range(0, 640, 72) задаёт числа 0, 72, 144 и так далее до 576. Копия в позиции 576 доходит до 648, то есть выходит за край: pygame рисует часть внутри окна и пропускает остальное, поэтому последний столбец аккуратно обрезается.

Плитки покрывают всё окно, поэтому они заменяют screen.fill: сначала нарисуйте их, затем всё остальное поверх. На этом изображении нет прозрачных пикселей, поэтому загрузите его с помощью .convert() — версии convert_alpha() для непрозрачных изображений.

challenge icon

Задание

Легко
  1. После set_mode загрузите assets/backgrounds/sky.png с помощью .convert() в переменную с именем tile.
  2. Замените screen.fill(...) двумя циклами, которые выводят tile в каждой точке (x, y), где x принимает значения из range(0, 640, 72), а y — из range(0, 480, 72).
  3. Продолжайте рисовать корабль после плиток.

Попробуйте сами

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()

Все уроки раздела Спрайты и изображения

Потренируйтесь самостоятельно: Песочница Pygame