Я все еще относительно новичок в Pygame и Python в целом, так что, надеюсь, это не так уж и далеко.
Я делаю нисходящую RPG, и у меня есть два объекта Sprite с изображениями, которые выглядят (например) так:
, которые используют фрагменты, которые не представляют всю полноту изображения:
class NPC(pygame.sprite.Sprite):
def __init__(self, image, pos, *groups):
super().__init__(*groups)
self.image = pygame.load(image)
self.rect = self.image.get_rect()
self.collisionRect = pygame.Rect(self.rect.left, self.rect.top + 12, self.image.get_width(), self.image.get_width())
#12 is the number of pixels that will overlap in the y-dimension
Я делаю это, потому что хочу, чтобы верхние несколько пикселей NPC перекрывались с другими спрайтами. collisionRect
в каждом объекте используется поверх rect
всякий раз, когда я обнаруживаю столкновение, чтобы я мог создать этот эффект.
Однако мне нужен способ перерисовать их в моей функции update (), чтобы один рисовал поверх другого в зависимости от их взаимного расположения.
Итак, когда один NPC находится над другим, он выглядит так:
Но, когда все наоборот, это должно выглядеть так:
Это означает, что изображения должны быть нарисованы в другом порядке, в зависимости от того, какой спрайт находится «ниже» другого.
Я думал о возможном разрезании спрайтов на отдельные спрайты и просто рисовал спрайты «головой» в последнюю очередь, но мне было интересно, существует ли более простой (или, по крайней мере, надежный) способ обнаружения следует ли рисовать спрайт последним или нет, в зависимости от того, перекрывает ли он другой спрайт и непосредственно под ним в измерении y.
Прошу прощения, если этот вопрос слишком широкий или требует большего контекста; может предоставить их при необходимости.