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.
Desafío
Fácil- Después de
set_mode, cargaassets/backgrounds/sky.pngcon.convert()en una variable llamadatile. - Reemplaza
screen.fill(...)por los dos bucles que dibujantileen cada(x, y), con x enrange(0, 640, 72)e y enrange(0, 480, 72). - 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
1Cargar imágenes
Cargar una imagenColocarla con un rectánguloMover la imagenRepetir un fondo en mosaicoPíxeles transparentes2Girar, voltear y escalar
Girar alrededor del centroApuntar en la dirección del vueloEscalar una imagenGirar desde la imagen original5Colisiones precisas a nivel de píxel
Los rectángulos parecen injustosMáscarasSprites precisos a nivel de píxelHitboxes circulares3Clases para objetos del juego
Tu primera claseMétodosSelf es el objetoUna lista de objetosObjetos con imágenesUna subclase6Animación con hojas de sprites
Recortar una hoja de spritesUn contador de fotogramasAnimar con el tiempoUna explosión de una sola vezPractica por tu cuenta: Playground de Pygame