gpt4 book ai didi

python-3.x - Pygame:display.update() 直到时钟延迟后才会更新

转载 作者:行者123 更新时间:2023-12-01 04:40:54 25 4
gpt4 key购买 nike

我正在使用 pygame 的 time.Clock以较低的 FPS 运行我的游戏,我注意到我的输入似乎需要额外的一帧才能生效。我做了一些调试,发现 pygame.event.get() 没有问题。而是使用 pygame.display.update() .我编写了一个简单的程序来演示这个问题:(程序说明在代码片段下方)

import pygame, sys
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((500, 500))
clock = pygame.time.Clock()
colour = 1
key_press = False

while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
screen.fill((0,255,0))
key_press = True
print("A key was pressed.")

if not key_press:
screen.fill((colour*255, colour*255, colour*255))
colour = not colour
else:
key_press = False

pygame.display.update()
clock.tick(0.5)

程序每两秒在黑屏和白屏之间闪烁一次,只要按下任何键,屏幕就会变为绿色, "A key was pressed"将打印到控制台。但是,当我运行它时,文本会在正确的时间打印,但屏幕直到下一帧才会变为绿色。这让我相信 pygame.display.update()调用函数时没有更新屏幕。

问题似乎在于调用 pygame.display.update() 后立即出现的延迟。 .如果您更改时钟的 FPS,问题仍然存在。如果您延迟 time.wait(),也会发生这种情况。或 pygame.time.delay()而不是 Clock.tick() .

我注意到的另一件有趣的事情是,如果您颠倒我示例中最后两行代码的顺序( pygame.display.update()clock.tick(0.5) ),您可能会认为屏幕会发生变化 两个 按下一个键而不是一个键后的时钟周期。但是,如果我这样做,我会得到与其他顺序完全相同的效果。

我不确定这是一个错误,还是我刚刚错过的一些微妙的事情发生了。我正在运行 Python 3.6.2 并在 macOS 上使用 Pygame v1.9.3。您可以提供的任何帮助将不胜感激!

最佳答案

我可以通过在 pygame.display.update() 调用和时钟之间调用 pygame.event.pump() (它不会清除事件队列,因此不会丢失事件处理)来修复一个程序中的这个故障。滴答(FPS)调用。基本上,我的主要游戏循环以:

pygame.display.update()
pygame.event.pump()
clock_object.tick(FPS_CONSTANT)

关于python-3.x - Pygame:display.update() 直到时钟延迟后才会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50219028/

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