Разрезать лист спрайтов
Часть раздела Спрайты и изображения путешествия по Pygame на Coddy. Урок 25 из 36.
Анимация — это несколько изображений, показанных одно за другим. В играх эти изображения часто хранятся в одном файле — листе спрайтов: сетке из маленьких кадров, расположенных вплотную друг к другу. В стартовом коде целиком отображается assets/sheets/platformer_characters.png: 9 кадров по горизонтали и 3 по вертикали, каждый размером 24 на 24 пикселя. Две позы зелёного персонажа при ходьбе — это первые два кадра в верхнем ряду.
sheet.subsurface(rect) возвращает часть листа, находящуюся внутри Rect, в виде отдельной Surface, не копируя ни одного пикселя. Кадр с номером col в строке row начинается в точке (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 пикселя — это очень мало для окна размером 640 на 480, поэтому каждый кадр масштабируется в 3 раза, до 72 на 72 пикселей. При увеличении в целое число раз пиксельная графика сохраняет чёткие края. Вырежи и масштабируй кадры один раз, до цикла, и сохрани их в списке: в следующих уроках ты будешь выбирать кадр по его индексу.
Задание
Средне- Перед циклом создай
frames: кадры из столбцов 0 и 1 верхнего ряда, каждый размером 24 на 24 и увеличенный в 3 раза. - Вместо всего листа нарисуй
frames[0]в точке(200, 200), аframes[1]— в точке(368, 200).
Попробуйте сами
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()
Все уроки раздела Спрайты и изображения
1Загрузка изображений
Загрузить изображениеРазместить его с помощью RectПереместить изображениеЗамостить фонПрозрачные пиксели2Поворот, отражение, масштабирование
Вращение вокруг центраПовернись в направлении полётаИзменение масштаба изображенияВращение от исходного изображения5Пиксельно точные столкновения
Прямоугольники кажутся несправедливымиМаскиПиксельно точные спрайтыКруглые хитбоксы3Классы игровых объектов
Ваш первый классМетодыSelf — это объектСписок объектовОбъекты с изображениямиПодкласс6Анимация с помощью листов спрайтов
Разрезать лист спрайтовСчётчик кадровАнимация по времениОднократная анимация взрываПотренируйтесь самостоятельно: Песочница Pygame