Menu
CoddyTech

平铺背景

本课属于 Coddy Pygame 学习旅程的“精灵与图像”单元。第 4 课,共 39 课。

单一颜色会让天空显得单调。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 之后,使用 .convert() 加载 assets/backgrounds/sky.png,并将其存入 tile。
  2. 用两个循环替换 screen.fill(...),在每个 (x, y) 位置绘制 tile,其中 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 在线编辑器