Menu
CoddyTech

Repetir un fondo en mosaico

Parte de la sección Sprites e imágenes del Journey de Pygame de Coddy. Lección 4 de 36.

Un color liso es un cielo aburrido. assets/backgrounds/sky.png es una imagen de 72 por 72 píxeles diseñada para repetirse: coloca copias una al lado de la otra y los bordes se unen sin dejar costuras. Cubrir la ventana con copias de una imagen pequeña se llama mosaico.

Dos bucles dan cada esquina superior izquierda, una fila de la cuadrícula a la vez:

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

range(0, 640, 72) es 0, 72, 144 y así sucesivamente hasta 576. La copia en 576 llega hasta 648, más allá del borde: pygame dibuja la parte que queda dentro de la ventana y omite el resto, así que la última columna se recorta limpiamente.

Los mosaicos cubren toda la ventana, así que sustituyen a screen.fill: dibújalos primero y luego dibuja todo lo demás encima. Esta imagen no tiene píxeles transparentes, así que cárgala con .convert(), la versión de convert_alpha() para imágenes opacas.

challenge icon

Desafío

Fácil
  1. Después de set_mode, carga assets/backgrounds/sky.png con .convert() en una variable llamada tile.
  2. Reemplaza screen.fill(...) por los dos bucles que dibujan tile en cada (x, y), con x en range(0, 640, 72) e y en range(0, 480, 72).
  3. Sigue dibujando la nave después de los mosaicos.

Pruébalo tú mismo

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

Todas las lecciones de Sprites e imágenes

Practica por tu cuenta: Playground de Pygame