Как определить, относятся ли две подповерхности Pygame к одной области - PullRequest
3 голосов
/ 25 декабря 2010

У меня есть 2 поверхности пигмеев (технически подповерхности), и мне нужно проверить их на равенство.

Вот мой код:

actor.display(mockSurface, Rect((0, 0, 640, 640)))
assert actor.image == actor.spriteSheet.subsurface(Rect((0, 30, 30, 30)))

А вот код, стоящий за actor.display:

def display(self, screen, camera_location):
    self.image = self.spriteSheet.subsurface(Rect((0, 30, 30, 30)))
    screen.blit(self.image, (0, 0))

Теперь вот ошибка, которую я получаю из этой строки утверждения:

>           assert teste.image == teste.spriteSheet.subsurface(Rect((0, 30, 30, 30)))
E           assert <Surface(30x30x32 SW)> == <Surface(30x30x32 SW)>
E            +  where <Surface(30x30x32 SW)> = <actor.Actor instance at 0x2f78ef0>.image
E            +  and   <Surface(30x30x32 SW)> = <Surface(120x90x32 SW)>.subsurface(<rect(0, 30, 30, 30)>)
E            +    where <Surface(120x90x32 SW)> = <actor.Actor instance at 0x2f78ef0>.spriteSheet
E            +    and   <rect(0, 30, 30, 30)> = Rect((0, 30, 30, 30))

Они должны быть равны (я ошибаюсь), но по какой-то хитрой уловке змеи утверждение не выполняется.

1 Ответ

1 голос
/ 25 декабря 2010

Используйте Surface.get_offset () и Surface.get_parent (), чтобы определить, указывают ли обе подповерхности на одну и ту же область своей родительской поверхности.

>>> parent = pygame.image.load("token1.png")
>>> parent
<Surface(128x128x32 SW)>
>>> s1 = parent.subsurface(pygame.Rect(0, 0, 2, 2))
>>> s2 = parent.subsurface(pygame.Rect(0, 0, 2, 2))
>>> s1
<Surface(2x2x32 SW)>
>>> s2
<Surface(2x2x32 SW)>
>>> s1 == s2
False
>>> s1.get_parent() == s2.get_parent()
True
>>> s1.get_offset() == s2.get_offset()
True
>>> s1.get_parent() == s2.get_parent() and s1.get_offset() == s2.get_offset()
True

И s1, и s2 относятся к разным объектам, поэтому не равны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...