Menu
CoddyTech

Pixel trasparenti

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

Un file immagine è sempre un rettangolo, ma una nave nemica no. I pixel intorno a essa sono trasparenti: ogni pixel di un PNG ha un quarto numero, il suo alfa, da 0 (trasparente) a 255 (opaco).

Il codice iniziale carica i tre nemici con convert(), che elimina l’alfa: ogni pixel trasparente diventa nero e ogni nemico si trova in un riquadro nero. convert_alpha() mantiene l’alfa, quindi solo i pixel opachi coprono la finestra. Usalo per qualsiasi cosa che non sia un rettangolo pieno.

Il Rect è ancora l’intero rettangolo. Tracciane il contorno per vedere il riquadro occupato dall’immagine:

rect = red.get_rect(topleft=(128, 200))
screen.blit(red, rect)
pygame.draw.rect(screen, (90, 90, 120), rect, 1)

L’ultimo numero, 1, traccia il contorno di 1 pixel invece di riempire il Rect. Guarda gli spazi tra il contorno e la nave. Due Rect possono sovrapporsi anche se le immagini al loro interno non si toccano, e un test di collisione con i Rect indica comunque che si sono scontrati. Il capitolo 5 risolve questo problema.

challenge icon

Sfida

Facile
  1. Carica i tre nemici con .convert_alpha() invece di .convert(), così i riquadri neri scompaiono.
  2. Dopo ogni nemico, traccia il contorno del suo Rect in (90, 90, 120), largo 1 pixel. I nemici restano in (128, 200), (288, 200) e (448, 200).

Provalo tu

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Three Enemies")
clock = pygame.time.Clock()

red = pygame.image.load("assets/images/enemy_red.png").convert()
green = pygame.image.load("assets/images/enemy_green.png").convert()
yellow = pygame.image.load("assets/images/enemy_yellow.png").convert()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((20, 22, 40))
    screen.blit(red, (128, 200))
    screen.blit(green, (288, 200))
    screen.blit(yellow, (448, 200))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Sprite e immagini

Esercitati da solo: Playground Pygame