Pygame | AttributeError: у объекта 'Background' нет атрибута 'image' - PullRequest
1 голос
/ 21 января 2020

У меня проблема с отрисовкой спрайта в группе (). Я планирую позже нарисовать несколько спрайтов, когда эта проблема будет решена.

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

Во всех случаях вот мои коды:

main.py

import sys
from pygamerectangle import Background
from settings import settings
import GFunctions as gf
from pygame.sprite import Group

if __name__ == "__main__":
    pygame.init()
    setting = settings()
    screen = pygame.display.set_mode((setting.width, setting.height))
    pygame.display.set_caption("Pygame Theory")
    background = 60,60,60

    BackgroundGroup = Background()
    BackgroundGroup = Group()

    gf.BackgroundRepeat(BackgroundGroup)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        screen.fill(background)
        BackgroundGroup.draw(screen)
        pygame.display.flip() 

pygamerectangle.py

import pygame
from pygame.sprite import Sprite

class Background(Sprite):
    def __init__(self):
        super().__init__()
        self.img = pygame.image.load("background.png")
        self.rect = self.img.get_rect()

GFunctions.py

import pygame
from pygamerectangle import Background

def BackgroundRepeat(BackgroundGroup):
    BackgroundSample = Background()


    BackgroundGroup.add(BackgroundSample) # Used as part of the fundamentals to add a single sprite.
                                          # The code after this contains my plan to repeat the image;
                                          # similar to old-school websites that had repeating
                                          # backgrounds.

  #  BackgroundSampleWidth = BackgroundSample.rect.width
 #   ScreenAvailableSpace = setting.width - 2 * BackgroundSampleWidth
#    NumberOfBackgrounds = int(ScreenAvailableSpace / (2 * BackgroundSampleWidth))

   # for BackgroundRepeating in range(NumberOfBackgrounds):
   #     Backgrounds = Background(setting, screen)
   #     Backgrounds.x = BackgroundSampleWidth + 2 * BackgroundSampleWidth * BackgroundRepeating
   #     Backgrounds.rect.x = Backgrounds.x
  #      BackgroundGroup.add(Backgrounds)

Примечание. Под GFunctions.py я понимаю, что некоторые вещи не будут работать, когда я раскомментирую коды, так как в них отсутствуют аргументы, такие как настройки. Я сделал это временно, так как понял, что это не является частью проблемы.

И вот ошибка, которую я получаю:

AttributeError: «У фонового объекта нет атрибута» image '


Для тех, кому интересно, какой у меня фоновый рисунок: Это изображение 8x8.


Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Хотя имена классов обычно должны использовать соглашение CapWords, имена переменных должны быть строчными. См. Руководство по стилю для Python Код .

. Это проблема строк

BackgroundGroup = Background()
BackgroundGroup = Group()

. После этих строк BackgroundGroup - это экземпляр Group и не имеет атрибута .image.

Изменить имена переменных. Используйте разные и строчные имена. Например:

backgroundSprite = Background()
backgroundGroup = Group()

gf.BackgroundRepeat(backgroundSprite)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    screen.fill(background)
    backgroundGroup.draw(screen)
    pygame.display.flip() 
def BackgroundRepeat(backgroundGroup):

    backgroundSample = Background()
    backgroundGroup.add(backgroundSample)
0 голосов
/ 21 января 2020

Программа вызывает AttributeError для 'image', что означает, что ваш фоновый объект не имеет атрибута 'image'. Просматривая ваш код, я вижу, что фоновые объекты имеют атрибут img:

self.img = pygame.image.load("background.png")

Так что где-то в вашем коде вы должны случайно ввести self.image вместо self.img. Убедитесь, что они совпадают, и ошибка должна исчезнуть.

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