Я не могу сделать список групп повторяющим свой метод через него (pygame.sprite) - PullRequest
0 голосов
/ 26 марта 2020
import pygame
from pygame.sprite import Sprite
from pygame.sprite import Group

class Raindrop(Sprite):

    def __init__(self, screen):
        super().__init__()
        ...
    ...
    def drop(self):
        ...
...
raindrops = Group()
...
raindrops.drop()
...

Когда я использую этот код, я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "raindrops.py", line 74, in <module>
    rain()
  File "raindrops.py", line 71, in rain
    update_raindrops.py(screen, raindrops)
  Dile "raindrops.py", line 57, in update_raindrops
   raindrops.drop()
AttributeError: 'Group' object has no attribute 'drop'

Почему это происходит? Когда я делал несколько очень похожих примеров из учебника, он определял метод для подкласса Sprite, затем составлял список спрайтов Group, а затем GroupList.ClassMethod () работал просто отлично. Но не в этом случае, по некоторым причинам. Я могу предоставить весь код, если вам нужно.

1 Ответ

0 голосов
/ 27 марта 2020

Ваше утверждение неверно - PyGame Sprite Group не применяет произвольные методы, только некоторые хорошо известные заранее определенные методы. Учитывая ваш пример кода, я подозреваю, что вы думаете о методе Sprite Group update() (и, возможно, draw()), который вызывает метод update() каждого спрайта в группе.

Если ваш Пример был:

import pygame
from pygame.sprite import Sprite
from pygame.sprite import Group

class Raindrop(Sprite):

    def __init__(self, screen):
        super().__init__()
        ...
    ...
    def update(self):                        # <<-- HERE, not "drop()"
        # TODO: move/change sprite shomehow
        ...
...
raindrops = Group()
...
raindrops.update()
...

Это будет работать нормально.

...