используя функцию pygame: [таблица спрайтов].подповерхностная функция, есть ли способ нарисовать спрайт снизу, а не в верхнем левом углу

#python #pygame #sprite

Вопрос:

У меня есть набор спрайтов, также на листе спрайтов, который слегка подпрыгивает вверх и вниз, поэтому высота спрайта немного меняется. Посредством кодирования: spritesheet.пользование недрами(Х, Y, ширина, высота), он будет рисовать спрайт, начиная с (Х, Y) и потом ширину и высоту вправо и вниз соответственно, однако, когда чертежа рамы из того же экрана-относительное положение, спрайт выглядит как ноги двигаются вниз и вверх. Таким образом, если бы я расположил кадр 1 спрайта так, чтобы ноги касались пола, то в кадре 2 ноги проходили бы сквозь пол.

Есть ли способ нарисовать спрайт, скажем, снизу слева или снизу в центре? Большое спасибо

Ответ №1:

pygame.Surface.subsurface использует прямоугольную область для создания новой поверхности, ссылающейся на свою родительскую поверхность. Начало координат (0, 0) системы координат pygame находится в левом верхнем углу. Это нельзя изменить.

Однако, если вы знаете нижнюю левую координату ( left_x , bottom_y ) спрайта на листке спрайта, прямоугольник спрайта можно вычислить ( spritesheet это pygame.Surface объект):

 sheet_height = spritsheet.get_height()
sprite = spritsheet.subsurface((left_x, sheet_height - bottom_y - height, width, height))
 

Код можно сделать более понятным с pygame.Rect помощью объекта:

 sheet_height = spritsheet.get_height()

sprite_rect = pygame.Rect(left_x, 0, height, height)
sprite_rect.bottom = sheet_height - bottom_y 

sprite = spritsheet.subsurface(sprite_rect )