Исправлено отображение сообщения только в течение доли секунды - PullRequest
1 голос
/ 18 апреля 2020

У меня проблема с pygame, когда я пытаюсь показать игровое сообщение, но оно просто сбрасывает фон после того, как пользователь нажимает ввод, в результате чего игровое сообщение отображается только на долю секунды.

Я собираю пользовательский ввод через некоторое время l oop (потому что он нужен только для запуска три раза) и использую pygame.event.poll () для обнаружения входящих входов, таких как ввод с клавиатуры и т. Д. c. Таким образом, я сделал так, что, когда пользователь нажимает ввод, он будет оценивать введенные данные и покажет игровое сообщение, если ввод правильный или нет. Тем не менее, игровое сообщение будет удалено за доли секунды, так как через некоторое время l oop. Можно ли как-нибудь сделать так, чтобы игровое сообщение отображалось до тех пор, пока я снова не нажму «Ввод»?

Вот сокращенная версия кода:

        while bad_input < 3:
            screen.blit(Variables.bgImage, [0, 0])

            ...

            ...
            e = pygame.event.poll()

            ...

            if e.type == KEYDOWN:
                # Add a character
                textBox.AddChar(pygame.key.name(e.key))

                ...

                # If the user presses return,
                elif e.key == K_RETURN:
                    # And if the text size was more than 0
                    if len(textBox.text) > 0:
                        user_input = textBox.text.lower()
                          if result[0]:
                               showGameLog("Correct!")
                          else:
                               showGameLog("Hm, not quite.")
                               bad_input += 1
                       textBox.text = ""
                       # Then update the textbox
                       textBox.Update()
            pygame.display.update()

и вот код для функции showGameLog:

def showGameLog(txt):
    text = font.render(txt , True, Color.black)
    screen.blit(logText, [25, 570])

Вот видео о том, как выглядит проблема: problemvid

1 Ответ

1 голос
/ 18 апреля 2020

Добавить состояние showText:

showText = False

Установить состояние при нажатии RETURN , но сбросить состояние, если RETURN и showText == True:

elif e.key == K_RETURN:
    if showText:
        showText = False
    elif len(textBox.text) > 0: # And if the text size was more than 0
        showText = True
        # [...]

Показать журнал игры, в зависимости от состояния showText, в главном приложении l oop:

if showText:
    if result[0]:
        showGameLog("Correct!")
    else:
        showGameLog("Hm, not quite.")

Возможно, вы захотите пропустить любой ввод до тех пор, пока игровой журнал отображается:

if e.type == KEYDOWN:
    if not showText:
        # Add a character
        textBox.AddChar(pygame.key.name(e.key))

Пример кода:

showText = False

while bad_input < 3:
    screen.blit(Variables.bgImage, [0, 0])
    # [...]    

    e = pygame.event.poll()
    # [...]

    elif e.type == KEYDOWN:
        if showText:
            if e.key == K_RETURN:
                showText = False
        else:
            # Add a character
            textBox.AddChar(pygame.key.name(e.key))
            # If the user press space, add a empty text and update the textbox.
            if e.key == K_SPACE:
                textBox.text += " "
                textBox.Update()
            # If the user presses backspace, delete a character
            elif e.key == K_BACKSPACE:
                textBox.text = textBox.text[:-1]
                textBox.Update()
            # If the user presses return,
            elif e.key == K_RETURN:
                # And if the text size was more than 0
                if len(textBox.text) > 0:
                    showText = True
                    # [...]
                    user_input = textBox.text.lower()
                    if not result[0]:
                        bad_input += 1
                    textBox.text = ""
                    # Then update the textbox
                    textBox.Update()

    if showText:
        if result[0]:
            showGameLog("Correct!")
        else:
            showGameLog("Hm, not quite.")

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