#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 )