Menu
CoddyTech

Ripetere uno sfondo

Fa parte della sezione Sprite e immagini del percorso Pygame di Coddy. Lezione 4 di 36.

Un colore uniforme rende il cielo monotono. assets/backgrounds/sky.png è un'immagine di 72 per 72 pixel fatta per essere ripetuta: affianca delle copie e i bordi combaciano senza lasciare giunture. Coprire la finestra con copie di una stessa piccola immagine si chiama tassellazione.

Due cicli forniscono ogni angolo in alto a sinistra, una riga della griglia alla volta:

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

range(0, 640, 72) dà 0, 72, 144 e così via fino a 576. La copia a 576 arriva a 648, oltre il bordo: pygame disegna la parte all'interno della finestra e salta il resto, quindi l'ultima colonna viene tagliata nettamente.

Le tessere coprono tutta la finestra, quindi sostituiscono screen.fill: disegnale per prime, poi disegna tutto il resto sopra. Questa immagine non ha pixel trasparenti, quindi caricala con .convert(), la versione di convert_alpha() per le immagini opache.

challenge icon

Sfida

Facile
  1. Dopo set_mode, carica assets/backgrounds/sky.png con .convert() in una variabile chiamata tile.
  2. Sostituisci screen.fill(...) con i due cicli che disegnano tile in ogni posizione (x, y), con x in range(0, 640, 72) e y in range(0, 480, 72).
  3. Continua a disegnare la nave dopo le tessere.

Provalo tu

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

Tutte le lezioni di Sprite e immagini

Esercitati da solo: Playground Pygame