Уведомления

Группа в Telegram: @pythonsu

#1 Март 1, 2019 16:59:48

DanDiablo
Зарегистрирован: 2017-03-30
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка, отсутствует 1 обязательный позиционный аргумент

Доброго времени суток, дамы и господа!

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

Ошибка:

 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, но такими темпами не закончу.
Благодарю за внимание!



Я часть той силы, что хочет зла, но вечно совершает благо.

Офлайн

#2 Март 1, 2019 17:15:48

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Ошибка, отсутствует 1 обязательный позиционный аргумент

потому что pygame.sprite.Group это класс, и чтобы создать экземпляр класса, нужно вызвать конструктор класса, вот так:

 sprite_group = pygame.sprite.Group()



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Март 2, 2019 13:50:50

DanDiablo
Зарегистрирован: 2017-03-30
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка, отсутствует 1 обязательный позиционный аргумент

То есть должно быть вот так:

 # Отображение героя
    hero.update(left, right)
    sprite_group = pygame.sprite.Group()
    sprite_group.draw(screen)

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

Блин, ни чего не понимаю. Наверное, рано мне такое.



Я часть той силы, что хочет зла, но вечно совершает благо.

Офлайн

#4 Март 3, 2019 13:26:35

Andrey_Golovin
Зарегистрирован: 2018-01-27
Сообщения: 35
Репутация: +  1  -
Профиль   Отправить e-mail  

Ошибка, отсутствует 1 обязательный позиционный аргумент

DanDiablo
То есть должно быть вот так:
Так группа пустая. Он и рисует вам пустую группу.
sprite_group = pygame.sprite.Group()
sprite_group.add(hero)

Офлайн

#5 Март 3, 2019 15:58:03

DanDiablo
Зарегистрирован: 2017-03-30
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка, отсутствует 1 обязательный позиционный аргумент

Вот я олень! Благодарю за помощь!



Я часть той силы, что хочет зла, но вечно совершает благо.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version