Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Изображение pygame AttributeError

Автор вопроса: user1615699Ответов: 1

Я пытаюсь создать игру pacman с помощью pygame, но столкнулся с несколькими проблемами. Это говорит о том, что у "Еды" нет изображения.

Это моя игра pacman [код отредактирован].

Проблема в том, что в этой области что-то не так, и это говорит мне, что у еды нет атрибута image

class Food(pygame.sprite.Sprite):
    def __init__(self,x,y,color):
        pygame.sprite.Sprite.__init__(self)

        pygame.image = pygame.Surface([7,7])
        self.image.fill(color)

        self.rect = self.image.get_rect()
        self.rect.top = y
        self.rect.left = x
    def update (self,player):
        collidePlayer = pygame.sprite.spritecollide(self,player,False)
        if collidePlayer:
            food.remove
  • Я нигде не вижу сообщения об ошибке. Joel Cornett 22.08.2012

pygamepython

Ответы

Ответ 1 · рейтинг 1 · DSM

Удалив все ненужные биты, вы видите разницу между методами __init__ следующих подклассов Sprite?

class Wall(pygame.sprite.Sprite):

    def __init__(self,x,y,width,height, color):#For when the walls are set up later
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface([width, height]) # <-------------
        self.image.fill(color)

class player(pygame.sprite.Sprite):

    def __init__ (self,x,y):

        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface([13,13])  # <-------------
        self.image.fill(white)

class Food(pygame.sprite.Sprite)
    def __init__(self,x,y,color):
        pygame.sprite.Sprite.__init__(self)

        pygame.image = pygame.Surface([7,7])  # <----- this one is different!
        self.image.fill(color)

Причина, по которой вы получаете сообщение об ошибке, говорящее о том, что self не имеет атрибута image, заключается в том, что вы не установили self.image, вы сохранили изображение в самом модуле pygame.

PS: линии, которые выглядят как

        food.remove

кажутся мне подозрительными. Если remove это метод, то он будет вызван food.remove(), а food.remove ничего не сделает.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы