Pygame 文本处理

Pygame 文本处理

我正在尝试编写一个 python/pygame 程序来简单地显示文本。我希望它能够工作,这样当您输入例如字母“A”时,它会出现在屏幕上(有点像 gedit/notepad/whatever)。我通过将字母附加到字符串中来实现这一点,然后该字符串被渲染并放到屏幕上。但是,我在实际获取用户输入方面遇到了问题。我知道有 pygame.key.get_pressed() 函数,但我只能在您真正知道您希望用户按下哪个键(例如 W 向前)的情况下弄清楚如何使用它,但如果我不知道,就无法使用它。如果这令人困惑,以下是我的代码:

import pygame
import sys
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((600,500))
myfont = pygame.font.Font(None, 60)
inp = ""

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()

    keys = pygame.key.get_pressed()
    inp = inp + #THE PRESSED KEY
    screen.fill((0,0,200))
    txt = myfont.render(inp, True, (255,255,255))
    screen.blit(txt, (100,100))
    pygame.display.update()

我想弄清楚如何将“按下的键”附加到字符串中。

答案1

您可以KEYDOWN为此使用该事件,因为pygame.key.get_pressed()它将以当前 FPS 的速度为您提供结果。

以下是根据您的代码修改后的工作示例:

import pygame
import sys
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((600,500))
myfont = pygame.font.Font(None, 60)
inp = ""

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
        if event.type == pygame.KEYDOWN:
            inp += event.unicode

    screen.fill((0,0,200))
    txt = myfont.render(inp, True, (255,255,255))
    screen.blit(txt, (100,100))
    pygame.display.update()

只改变了这一点:

  • 删除了你的pygame.key.get_pressed()来电
  • 添加了pygame.KEYDOWN事件检查

相关内容