Ошибка Pygame: TypeError: аргумент 1 должен быть pygame.Surface, а не None - PullRequest
0 голосов
/ 30 января 2019

У меня есть игра, которую я сейчас делаю, и у меня есть классы mainDisplay, sprite, testSprite и функция spriteAnimate:

class mainDisplay:

    def __init__(self):
        self.screenDisplay = pygame.display.set_mode(
            [1200, 720])  # create game window SURFACE object (screen display is a SURFACE)
        pygame.display.set_caption("Blue")  # set window name


class sprite(pygame.sprite.Sprite):
    def __init__(self, colWidth, colHeight,framesNo, spriteGroup='', spawnX=0, spawnY=0,):
        super().__init__()
        self.xSpawn = spawnX
        self.ySpawn = spawnY
        self.spawnCoords = (spawnX, spawnY)
        self.surface = pygame.Surface((colWidth, colHeight))  # make sprite surface
        self.rect = pygame.Rect(self.xSpawn, self.ySpawn, colWidth, colHeight)
        self.masks = [None]*framesNo
        self.index = 0
        self.image = self.masks[self.index]
        if spriteGroup != '':
            spriteGroup.add(self)  # if there is a sprite group, add it

    def next(self):
        self.index += 1
        if self.index >= len(self.masks):
            self.index = 0
        print(self.index)
        self.image = self.masks[self.index]


class testSprite(sprite):
    def __init__(self, mainDisplay):
        self.mask1 = pygame.image.load(
        os.path.join('D:\BLUE\code\spriteIMG', 'testmask1.png'))  # sets the images to png images
        self.mask2 = pygame.image.load(os.path.join('D:\BLUE\code\spriteIMG', 'testmask2.png'))
        self.mask3 = pygame.image.load(os.path.join('D:\BLUE\code\spriteIMG', 'testmask3.png'))
        super().__init__(640, 640, 4, testGroup)
        self.masks[0] = self.mask1
        self.masks[1] = self.mask2
        self.masks[2] = self.mask3
        self.masks[3] = self.mask2


def spriteAnimate(sprite1, spriteGroup1, clock,display):
    framerate = 100
    while sprite1.alive():
        spriteGroup1.draw(mainDisplay.screenDisplay)
        sprite1.next()
        pygame.display.flip()
        currentTime = pygame.time.get_ticks()
        clock.tick(5)

Она реализована в функции mainGame:

def mainGame(display):
    display.screenDisplay.fill(colours.buttonBlue)
    errorMessage = text((515), ((720 / 20) * 2), 'Candara', 38, colours.buttonDarkC, 'main game is under construction',
                        display)
    test1 = testSprite(display)
    spriteClock = pygame.time.Clock()
    spriteAnimate(test1,testGroup,spriteClock,display)

Когда я пытаюсь запустить этот код, он отображает ошибку «AttributeError: тип объекта« mainDisplay »не имеет атрибута« screenDisplay »в отношении строки в spriteAnimate (): spriteGroup1.draw (mainDisplay.screenDisplay)

Первоначально я сделал это, передав параметры (ошибка была другая:

TypeError: аргумент 1 должен быть pygame.Surface, а не None

Однако затем перешел к попытке напрямую сослаться на класс mainDisplay. Я не уверен, слишком долго я смотрел на код и не могу найти то, что смотрит мне в лицо иличто.

Текущий обратный вызов:

Traceback (most recent call last):
  File "D:/BLUE/code/testing.py", line 200, in <module>
    main()
  File "D:/BLUE/code/testing.py", line 193, in main
    firstScreen(display, screen1, maingame)  # starts first screen
  File "D:/BLUE/code/testing.py", line 113, in firstScreen
    mainMenu(quitButton, startButton, continueButton, mainDisplay)
  File "D:/BLUE/code/testing.py", line 93, in mainMenu
    mainGame(mainDisplay)
  File "D:/BLUE/code/testing.py", line 174, in mainGame
    spriteAnimate(test1,testGroup,spriteClock,display)
  File "D:/BLUE/code/testing.py", line 126, in spriteAnimate
    spriteGroup1.draw(mainDisplay.screenDisplay)
AttributeError: type object 'mainDisplay' has no attribute 'screenDisplay'

Process finished with exit code 1
...