如何解决如何更新在 pygame 中显示用户输入文本?
我正在用 pygame 编写一个基本程序,在某些方面需要从用户那里获取文本输入。我的问题是,当用户想要擦除部分文本时,旧文本会一直显示在 pygame 窗口中。 假设用户键入“23”,然后按退格键。控制台显示 2,但 pygame 窗口将继续显示 23。 我正在使用:
if event.key == pg.K_BACKSPACE:
text = text[:-1]
解决方法
您必须在更改文本后(重新)渲染文本表面,并且必须清除每一帧中的显示:
最小示例:
import pygame
pygame.init()
window = pygame.display.set_mode((400,200))
font = pygame.font.SysFont(None,40)
clock = pygame.time.Clock()
text = ""
text_surf = font.render(text,True,(0,0))
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_BACKSPACE:
text = text[:-1]
else:
text += event.unicode
text_surf = font.render(text,0))
window_center = window.get_rect().center
window.fill((255,255,255))
window.blit(text_surf,text_surf.get_rect(center = window_center))
pygame.display.flip()
clock.tick(60)
pygame.quit()
exit()
典型的 PyGame 应用程序循环必须:
- 通过调用
pygame.event.pump()
或pygame.event.get()
来处理事件。 - 根据输入事件和时间(分别为帧)更新游戏状态和对象位置
- 清除整个显示或绘制背景
- 绘制整个场景(
blit
所有对象) - 通过调用
pygame.display.update()
或pygame.display.flip()
来更新显示 - 使用
pygame.time.Clock.tick
限制每秒帧数以限制 CPU 使用率
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。