Найти - Пользователи
Полная версия: Ошибка, отсутствует 1 обязательный позиционный аргумент
Начало » Центр помощи » Ошибка, отсутствует 1 обязательный позиционный аргумент
1
DanDiablo
Доброго времени суток, дамы и господа!

Начал было делать платформер по видео уроку, но тут вылезла ошибка в коде. На видео все работает!

Ошибка:

 Traceback (most recent call last):
  File "G:/test/Python/platformer/platformer.py", line 75, in <module>
    sprite_group.draw(screen)
TypeError: draw() missing 1 required positional argument: 'surface'


Код файла:

 import pygame
from Player import Player
from Platforms import Platform
SIZE = (640, 480)
# Создаем окно
window = pygame.display.set_mode(SIZE)
# Создаем поверхность
screen = pygame.Surface(SIZE)
# Герой
hero = Player(55, 55)
left = right = False
# Создание уровня
level = [
    '----------------',
    '-              -',
    '-              -',
    '-  ---         -',
    '-              -',
    '-        ----  -',
    '-              -',
    '-              -',
    '-          --  -',
    '-              -',
    '-              -',
    '----------------',
]
sprite_group = pygame.sprite.Group
sprite_group.add(hero)
platforms = []
x = 0
y = 0
for row in level:
    for col in row:
        if col == '-':
            pl = Platform(x, y)
            sprite_group.add(pl)
            platforms.append(pl)
        x += 40
    y += 40
    x = 0
# Игровой цикл
done = True
timer = pygame.time.Clock()
while done:
    # управление событиями
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            done = False
        if e.type == pygame.KEYDOWN:
            if e.key == pygame.K_LEFT:
                left = True
            if e.key == pygame.K_RIGHT:
                right = True
        if e.type == pygame.KEYUP:
            if e.key == pygame.K_LEFT:
                left = False
            if e.key == pygame.K_RIGHT:
                right = False
    # Закрашиваем поверхность
    screen.fill((10, 120, 10))
    # Отображение героя
    hero.update(left, right)
    sprite_group.draw(screen)
    # Отображаем поверхность
    window.blit(screen, (0, 0))
    # Обновляем окно
    pygame.display.flip()
    timer.tick(60)

Как я понимаю, не передан параметр, на чем рисовать.

Но вот же, я указывал:

 sprite_group.draw(screen)

При этом:

 SIZE = (640, 480)
# Создаем поверхность
screen = pygame.Surface(SIZE)

И на видео у человека то все работает!

Как так, что не так?
Помогите, люди добрые!
А то я сам только начал изучать python, но такими темпами не закончу.
Благодарю за внимание!
PEHDOM
потому что pygame.sprite.Group это класс, и чтобы создать экземпляр класса, нужно вызвать конструктор класса, вот так:
 sprite_group = pygame.sprite.Group()
DanDiablo
То есть должно быть вот так:
 # Отображение героя
    hero.update(left, right)
    sprite_group = pygame.sprite.Group()
    sprite_group.draw(screen)

Тогда запуск идет без ошибок, но и ни один спрайт не отображается. Только заливка зеленым цветом - фон.

Блин, ни чего не понимаю. Наверное, рано мне такое.
Andrey_Golovin
DanDiablo
То есть должно быть вот так:
Так группа пустая. Он и рисует вам пустую группу.
sprite_group = pygame.sprite.Group()
sprite_group.add(hero)
DanDiablo
Вот я олень! Благодарю за помощь!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB