Попытка воспроизвести анимацию в pygame вызывает ошибку - PullRequest
2 голосов
/ 18 июня 2020

Я пытаюсь создать игру, в которой на начальном экране я хочу воспроизводить анимацию при нажатии start. Это дает мне ошибку «TypeError: аргумент 1 должен быть pygame.Surface, а не список». Вот как я загружаю изображения для анимации:

for i in range(3, 53):
    menuanimation.append(pygame.image.load("menu/menu" + str(i) +".jpg"))

Вот где это вызывается кнопкой

    if event.type == pygame.MOUSEBUTTONDOWN:
        mouse_pos = event.pos
        if button1.collidepoint(mouse_pos):
            menuanimations()
            player.run = True
            player.start = False

А вот где функция

def menuanimations():
    win.blit(menuanimation, (0, 0))
    print("testing")

1 Ответ

2 голосов
/ 18 июня 2020

Проблема в том, что ваша переменная menuanimation представляет собой список поверхностей , а не поверхность. Функция Pygame Surface.blit() ожидает единственную поверхность (изображение) в качестве параметра, вы даете ему список. Вероятно, вы имеете в виду, чтобы нарисовать только одно изображение из списка, поэтому переменная списка должна быть проиндексирована.

Вероятно, вы хотите что-то вроде:

def menuanimations():
    global animation_frame, menuanimation
    if ( animation_frame >= len( menuanimation ) ):         # Stay within limit
        animation_frame = 0
    win.blit( menuanimation[ animation_frame ], ( 0, 0 ) )  # Index into the list
    animation_frame += 1

И, очевидно, вам нужно инициализация animation_frame=0

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