Menu
CoddyTech

Pixels transparentes

Parte da seção Sprites e imagens do Journey de Pygame da Coddy. Lição 5 de 36.

Um arquivo de imagem é sempre um retângulo, mas uma nave inimiga não é. Os pixels ao redor dela são transparentes: cada pixel de um PNG tem um quarto número, seu alfa, de 0 (transparente) a 255 (opaco).

O código inicial carrega os três inimigos com convert(), que descarta o alfa: cada pixel transparente fica preto, e cada inimigo fica dentro de uma caixa preta. convert_alpha() mantém o alfa, então apenas os pixels opacos cobrem a janela. Use-o para tudo que não seja um retângulo sólido.

O Rect ainda é o retângulo inteiro. Contorne-o para ver a caixa ocupada pela imagem:

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

O último número, 1, desenha um contorno de 1 pixel em vez de preencher o Rect. Observe os espaços entre o contorno e a nave. Dois Rects podem se sobrepor mesmo quando as imagens dentro deles não se tocam, e um teste de colisão com Rects ainda diz que eles colidiram. O Capítulo 5 resolve isso.

challenge icon

Desafio

Fácil
  1. Carregue os três inimigos com .convert_alpha() em vez de .convert(), para remover os retângulos pretos.
  2. Depois de cada inimigo, contorne seu Rect em (90, 90, 120), com 1 pixel de largura. Os inimigos permanecem em (128, 200), (288, 200) e (448, 200).

Experimente você mesmo

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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Sprites e imagens

Pratique por conta própria: Playground de Pygame