Imágenes de losetas
Parte de la sección Mundos del Journey de Pygame de Coddy. Lección 6 de 35.
Los rectángulos marrones muestran dónde están las paredes. Las imágenes hacen que el nivel parezca un lugar. Carga cada imagen de mosaico una vez, después de set_mode:
block_img = pygame.image.load("assets/images/block.png").convert_alpha()
coin_img = pygame.image.load("assets/images/coin.png").convert_alpha()Cada mosaico mide 36 por 36, el tamaño de un mosaico del mapa, así que encaja en la cuadrícula sin cambiar de escala. La imagen de la moneda tiene un borde vacío, así que dibújala en la esquina del mosaico y la moneda quedará en el centro.
Guarda lo que hay que dibujar en una sola lista de pares: qué imagen y dónde. tiles.append((block_img, rect)) añade un par; el bucle del juego los dibuja todos:
for image, rect in tiles:
screen.blit(image, rect)El bucle desempaqueta cada par en image y rect.
Desafío
Fácil- Después de
set_mode, cargaassets/images/block.pngenblock_imgyassets/images/coin.pngencoin_img, cada uno conconvert_alpha(). - Antes del bucle del juego, crea una lista llamada
tiles: para cada#, el par(block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE)); para cadaC,(coin_img, ...)con el mismo Rect. - En el bucle del juego, dibuja con blit cada par de
tilesen lugar de dibujar los rectángulos marrón y amarillo.
Pruébalo tú mismo
import pygame
TILE = 36
WALL = (120, 90, 60)
COIN = (255, 196, 0)
LEVEL = [
"###.............",
"###.............",
"..........C.....",
".........####...",
"..C.............",
".####......C....",
"..........###...",
"#....C.........#",
"###..##...###.##",
"######..########",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Tiles")
clock = pygame.time.Clock()
walls = []
coins = []
for row, line in enumerate(LEVEL):
for col, char in enumerate(line):
if char == "#":
walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))
elif char == "C":
coins.append(pygame.Rect(col * TILE + 10, row * TILE + 10, 16, 16))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((140, 200, 240))
for wall in walls:
pygame.draw.rect(screen, WALL, wall)
for coin in coins:
pygame.draw.rect(screen, COIN, coin)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Mundos
1Mapas a partir de texto
Un nivel en textoFilas y columnasLetras con significadoDónde empieza el jugadorUna pantalla a la vez4Colisiones con plataformas
Paredes a izquierda y derechaAterrizar en plataformasGolpearse la cabezaCaer fuera del nivelUn eje a la vez5Una cámara con desplazamiento
Un desplazamiento de cámaraSeguir al jugadorMantener la cámara dentroParalajePractica por tu cuenta: Playground de Pygame