gpt4 book ai didi

python - 屏幕仅在我检查用户输入 pygame 时更新

转载 作者:太空宇宙 更新时间:2023-11-04 04:00:05 29 4
gpt4 key购买 nike

我正在使用 pygame 并在主循环的每个循环中更新到屏幕。我不明白的是,在我添加一个 for 循环查找事件之前,什么都不会更新,然后突然所有更新都发生了。这是为什么?

   def run(self):

two_pm = get_stand_up_timestamp()

pygame.init()
font = pygame.font.Font(None, 72)
screen = pygame.display.set_mode(self._dimensions)



before_two = True
while before_two:

# Blit the time to the window.
# Update Screen.
current_time = datetime.datetime.now()
text = font.render(f'{current_time.hour} : {current_time.minute} : {current_time.second}', True, (0, 0, 0))
blit_center = (
self._dimensions[0] // 2 - (text.get_width() // 2),
self._dimensions[1] // 2 - (text.get_height() // 2)
)
screen.fill((255, 255, 255))
screen.blit(text, blit_center)
pygame.display.flip()

# Get events.
for event in pygame.event.get():

if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
sys.exit()


最佳答案

当您调用 pygame.event.get()(或 pump())时,pygame 会处理您的窗口管理器发送到由 pygame 管理的窗口的所有事件。

您看不到这些事件,因为它们不是由 get() 返回的,但 pygame 会在内部处理它们。这些事件可以是 Windows 上的 WM_PAINT 或 Linux 上的 Expose(IIRC pygame 使用 Xlib),或其他事件(我猜你可以在 pygame 的源代码中查找它们)。

例如如果您在 Windows 上运行 pygame,Pygame 必须调用 Windows 的 GetMessage函数,否则:

If a top-level window stops responding to messages for more than several seconds, the system considers the window to be not responding and replaces it with a ghost window that has the same z-order, location, size, and visual attributes. This allows the user to move it, resize it, or even close the application. However, these are the only actions available because the application is actually not responding.

因此,如果您不让 pygame 处理事件,那么典型的行为是它基本上会运行,但鼠标光标会变为忙碌光标,并且在它最终卡住之前您无法移动窗口。

如果您在其他系统上运行 pygame,例如Linux,你只会看到黑屏。我不知道 pygame 在 Linux 上运行时消息循环的内部结构,但它类似于 Windows 消息循环:你必须处理队列中的事件才能让 pygame 调用 Xlib 的 XNextEvent。函数 (IIRC) 给窗口管理器一个绘制窗口的机会。

参见例如Message loop in Microsoft Windows和/或 Xlib有关该主题的更多信息。

关于python - 屏幕仅在我检查用户输入 pygame 时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58560463/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com