Чтобы использовать функции обнаружения коллизий в Pygame (например, pygame.sprite.spritecollide
), вашему классу не обязательно быть подклассом Sprite
.
в Pygame.
Благодаря типизации уток в Python фактический класс не имеет значения, если ваш класс ведет себя как Sprite
. В этом контексте это просто означает, что ваш класс должен иметь атрибут rect
, и он должен быть Rect
(опять же, технически, он не обязательно должен быть Rect
, только «похожим»).
Учитывая простой класс, подобный этому:
>>> class Foo():
... def __init__(self):
... self.rect=pygame.rect.Rect(100, 100, 100, 100)
мы можем использовать pygame.sprite.spritecollide
так:
>>> f=Foo()
>>> g=Foo()
>>> pygame.sprite.spritecollide(f, [g], False)
[<__main__.Foo instance at 0x0000000003C6DF48>]
Также посмотрите, что второй аргумент - это не Group
, а простой List
, но для python все равно, поскольку единственное, что имеет значение в этом случае, - это то, что вы можете перебирать объект. Если вы передадите True
в качестве третьего аргумента, это не получится, поскольку spritecollide
попытается вызвать sprites()
и второй аргумент и kill()
для элементов внутри.
Точно так же, если вы хотите, например, использовать обнаружение столкновений с точностью до пикселя, вам нужен атрибут mask
и т. д. Поэтому вы все равно должны использовать класс Sprite
, так как он предлагает еще больше таких вещей, как управление группами. Кроме того, каждый раз, когда вы хотите сохранить позицию или размер, рассмотрите возможность использования класса Rect
в Pygame, поскольку он достаточно мощный и используется / ожидается во многих функциях Pygame.
tl; dr: Использовать класс Sprite
в Pygame. Вероятно, у вас нет веской причины не делать этого, и есть масса веских причин, чтобы на самом деле использовать это.