Przezroczyste piksele
Część sekcji Sprite’y i obrazy ścieżki Pygame w Coddy. Lekcja 5 z 36.
Plik obrazu zawsze jest prostokątem, ale statek wroga nim nie jest. Piksele wokół niego są przezroczyste: każdy piksel PNG ma czwartą wartość, czyli kanał alfa, od 0 (przezroczysty) do 255 (nieprzezroczysty).
W kodzie startowym trzech wrogów ładuje się za pomocą convert(), które odrzuca kanał alfa: każdy przezroczysty piksel staje się czarny, a każdy wróg znajduje się w czarnym prostokącie. convert_alpha() zachowuje kanał alfa, więc tylko nieprzezroczyste piksele zasłaniają okno. Używaj tej metody w przypadku wszystkiego, co nie jest jednolitym prostokątem.
Rect nadal obejmuje cały prostokąt. Narysuj jego obrys, aby zobaczyć, jaką przestrzeń zajmuje obraz:
rect = red.get_rect(topleft=(128, 200))
screen.blit(red, rect)
pygame.draw.rect(screen, (90, 90, 120), rect, 1)Ostatnia liczba, 1, rysuje obrys o grubości 1 piksela zamiast wypełniać Rect. Zwróć uwagę na przerwy między obrysem a statkiem. Dwa obiekty Rect mogą na siebie nachodzić, choć obrazy w ich wnętrzach się nie stykają, a test kolizji z użyciem obiektów Rect nadal wskazuje, że doszło do zderzenia. Rozdział 5 rozwiązuje ten problem.
Wyzwanie
Łatwy- Wczytaj trzech wrogów za pomocą
.convert_alpha()zamiast.convert(), aby pozbyć się czarnych prostokątów. - Po każdym wrogu narysuj obrys jego prostokąta Rect w kolorze
(90, 90, 120), o szerokości 1 piksela. Wrogowie pozostają w położeniach(128, 200),(288, 200)i(448, 200).
Spróbuj swoich sił
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()
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Sprite’y i obrazy
1Wczytywanie obrazów
Wczytaj obrazUmieść go za pomocą RectPrzesuń obrazPowiel tłoPrzezroczyste piksele2Obracaj, odbijaj, skaluj
Obracaj wokół środkaKieruj się w stronę lotuSkaluj obrazObracaj względem oryginału5Kolizje z dokładnością do piksela
Prostokąty wydają się niesprawiedliweMaskiSprite’y z dokładnością do pikselaKołowe hitboxy6Animacja z arkuszy sprite’ów
Przytnij arkusz sprite’ówLicznik klatekAnimacja w czasieJednorazowa eksplozjaPoćwicz samodzielnie: Edytor online Pygame