Przytnij arkusz sprite’ów
Część sekcji Sprite’y i obrazy ścieżki Pygame w Coddy. Lekcja 25 z 36.
Animacja to kilka obrazków wyświetlanych jeden po drugim. Gry często przechowują te obrazki w jednym pliku, arkuszu sprite’ów: siatce małych klatek ułożonych obok siebie. Kod startowy rysuje cały plik assets/sheets/platformer_characters.png: 9 klatek w poziomie i 3 w pionie, każda o wymiarach 24 na 24 piksele. Dwie pozy zielonej postaci podczas chodzenia to dwie pierwsze klatki w górnym rzędzie.
sheet.subsurface(rect) zwraca część arkusza znajdującą się wewnątrz obiektu Rect jako osobny obiekt Surface, bez kopiowania żadnego piksela. Klatka o numerze col w wierszu row zaczyna się w punkcie (col * 24, row * 24):
frames = []
for col in (0, 1):
frame = sheet.subsurface((col * 24, 0, 24, 24))
frames.append(pygame.transform.scale_by(frame, 3))24 piksele to niewiele w oknie o wymiarach 640 na 480, dlatego każda klatka jest powiększana 3 razy do rozmiaru 72 na 72. Grafika pikselowa powiększona o całkowitą wartość zachowuje ostre krawędzie. Wytnij i powiększ klatki raz, przed pętlą, a następnie umieść je na liście: w kolejnych lekcjach wybierzesz klatkę według jej indeksu.
Wyzwanie
Średni- Przed pętlą utwórz
frames: klatki w kolumnach 0 i 1 górnego wiersza, każda o wymiarach 24 na 24, przeskalowane 3 razy. - Zamiast całego arkusza narysuj
frames[0]w(200, 200)iframes[1]w(368, 200).
Spróbuj swoich sił
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Sprite Sheet")
clock = pygame.time.Clock()
sheet = pygame.image.load("assets/sheets/platformer_characters.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(sheet, (212, 204))
pygame.display.flip()
clock.tick(60)
pygame.quit()
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