аргумент должен быть таким, но это неправильно?

#python #pygame #typeerror

#python #pygame #ошибка типа

Вопрос:

Хорошо, итак, я работаю с pygame и пытаюсь создать систему, в которой, когда символ попадает в область экрана, появляется большой текст с надписью «Вы разбились». но когда я пробую код и врезаюсь в стену, ничего не происходит, и я получаю сообщение об ошибке в оболочке

 error: Traceback (most recent call last):
  File "D:pygame test.py", line 88, in <module>
    game_loop()
  File "D:pygame test.py", line 84, in game_loop
    crash()
  File "D:pygame test.py", line 44, in crash
    message_display('You Crashed')
  File "D:pygame test.py", line 34, in message_display
    gameDisplay.blit(TextSurface)
TypeError: argument 1 must be pygame.Surface, not pygame.Rect.
 

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

 def message_display (text):
    LargeText = pygame.font.Font('freesansbold.ttf', 115)
    TextRect = text_objects(text, LargeText)
    TextSurface = text_objects(text, LargeText)
    TextRect.center = ((display_width/2), (display_height/2))
    pygame.display.flip()
    gameDisplay.blit(TextSurface)
 

очень признателен.

Комментарии:

1. что такое text_objects функция? Ошибка, похоже, подразумевает, что она возвращает a pygame.rect , когда blit требует pygame.Surface

2. Я не совсем уверен, что text_objects нужно быть честным с вами. но я думаю, что это может быть просто попытка упростить ситуацию или что-то в этом роде

Ответ №1:

Предполагаю, что вы работаете с примером на этом сайте.

Итак, ваша text_objects функция выглядит так:

 def text_objects(text, font):
    textSurface = font.render(text, True, black)
    return textSurface, textSurface.get_rect()
 

Затем вам нужно изменить свою message_display функцию, чтобы обрабатывать оба возврата из text_objects() :

 def message_display (text):
    LargeText = pygame.font.Font('freesansbold.ttf', 115)
    TextSurface, TextRect = text_objects(text, LargeText)
    TextRect.center = ((display_width/2), (display_height/2))
    gameDisplay.blit(TextSurface)
    # this next line should probably only be called in your main loop
    pygame.display.flip()