Проблемы с созданием объектов классов в Python - PullRequest
1 голос
/ 06 марта 2020

Я пытаюсь заставить меч появляться, когда я нажимаю пробел, и исчезаю, когда я нажимаю клавишу 5.

if event.type == pg.KEYUP:
                if event.key == pg.K_ESCAPE:
                    self.quit()
                if event.key == pg.K_SPACE:
                    self.sword = Sword(self, self.player.rect.centerx-7, self.player.rect.bottom, self.player)
                if event.key == pg.K_5:
                    self.sword.kill()

Я могу заставить первый меч появляться и исчезать без каких-либо проблем, но когда я попробуйте нажать пробел еще раз, я получаю сообщение об ошибке:

File "/Users/(User)/Desktop/ZeldaGame/sprites.py", line 183, in __init__
    self.image.set_colorkey(WHITE)
AttributeError: 'Sword' object has no attribute 'set_colorkey'

Вот мой класс Меча:

class Sword(pg.sprite.Sprite):
    def __init__(self, game, x, y, entity):
        self.groups = game.all_sprites
        pg.sprite.Sprite.__init__(self, self.groups)
        self.game = game
        self.image = self.game.sword
        self.image.set_colorkey(WHITE)
        self.rect = self.image.get_rect()
        self.x = x
        self.y = y
        self.rect.x = x 
        self.rect.y = y 
        if entity.direction == 'down':
            self.image = pg.transform.rotate(self.image, -90)

        def update(self):
            kill()

Может ли кто-нибудь помочь мне сделать меч способным появляться, исчезать, и появляются снова и снова?

1 Ответ

3 голосов
/ 06 марта 2020

Предупреждение: я ничего не знаю о PyGame.

Кажется, что game.sword изначально, до создания самого первого меча, является pygame.Surface объектом - это всего лишь предположение, потому что вы не показали эту часть кода. (set_colorkey кажется pygame.Surface методом, и в силу того факта, что вы можете вызвать Sword.__init__ в первый раз без каких-либо ошибок, говорит мне, что game.sword изначально должен быть pygame.Surface объектом, в противном случае self.image.set_colorkey(WHITE) вызовет ошибку).

Затем, при втором нажатии пробела game.sword будет ссылаться на объект Sword, поскольку вы выполнили self.sword = Sword(... при первом нажатии пробела. Вы вводите второй меч __init__, но теперь game.sword относится к Sword, а не pygame.Surface. Sword s не имеют set_colorkey метода, поэтому ошибка (я предполагаю, pygame.Sprite не наследуется от pygame.Surface).

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