Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame,在设定的时间内绘制同一帧_Python_Time_Pygame_Message - Fatal编程技术网

Python Pygame,在设定的时间内绘制同一帧

Python Pygame,在设定的时间内绘制同一帧,python,time,pygame,message,Python,Time,Pygame,Message,我想显示一条消息两秒钟。 我现在使用的逻辑是让代码在pygame.time.delay(2000)之后等待pygame.display.flip 一个简短的例子:(我经常在我的代码上使用这个翻转延迟) 这确实有效,但它往往会“挂起”整个过程,因此,当这种情况发生时,我会因此产生一些错误,主要是一些帧丢失,因为程序可以跟上睡眠-觉醒周期 所以我现在想的是画两秒钟的同一帧 你们建议我做什么 因为我的答案之一是将每次翻转都放在while循环上,所以必须有一种更好的行保守方法来解决这个问题。您的程序“挂

我想显示一条消息两秒钟。

我现在使用的逻辑是让代码在
pygame.time.delay(2000)
之后等待
pygame.display.flip

一个简短的例子:(我经常在我的代码上使用这个翻转延迟)

这确实有效,但它往往会“挂起”整个过程,因此,当这种情况发生时,我会因此产生一些错误,主要是一些帧丢失,因为程序可以跟上睡眠-觉醒周期

所以我现在想的是画两秒钟的同一帧

你们建议我做什么

因为我的答案之一是将每次翻转都放在while循环上,所以必须有一种更好的行保守方法来解决这个问题。

您的程序“挂起”,因为您在睡觉时没有调用
pygame.event.get()
pygame.event.get()让pygame处理其内部事件

最简单的解决方法是使用
dt=clock.tick()
的返回值,在这种情况下
dt
将是自上次调用
clock.tick()
以来的时间,该值将以毫秒为单位。 然后,您可以使用该值增加计数器显示消息的时间

如果需要,您可以编写这样的函数,并用等待的时间调用它:

def waitFor(waitTime): # waitTime in milliseconds
    screenCopy = screen.copy()
    waitCount = 0
    while waitCount < waitTime:
        dt = clock.tick(60) # 60 is your FPS here
        waitCount += dt
        pygame.event.pump() # Tells pygame to handle it's event, instead of pygame.event.get()
        screen.blit(screenCopy, (0,0))
        pygame.display.flip()
def waitFor(waitTime):#以毫秒为单位的waitTime
screenCopy=screen.copy()
等待计数=0
当waitCount

此功能将等待指定的时间,并使屏幕保持通话前的状态。

您好,谢谢您的回答,我不知道“挂起”这个词现在是否正确,但它会冻结显示屏和屏幕。但是clock.tick()不需要一个while循环?那是因为你不让它处理它的事件。在一个简单的解决方案上检查我的新示例。clock.tick()等待足够长的时间,以便达到指定的FPS,clock.tick()每次迭代只应调用一次!非常重要的是,你误解了clock.tick()的功能,它不是用来等待特定的时间,而是让你的游戏以特定的帧速运行。非常感谢你的帮助,你解决了我的一些疑问,我发现了一些我不知道的新功能,你提供的示例工作得非常完美。
def waitFor(waitTime): # waitTime in milliseconds
    screenCopy = screen.copy()
    waitCount = 0
    while waitCount < waitTime:
        dt = clock.tick(60) # 60 is your FPS here
        waitCount += dt
        pygame.event.pump() # Tells pygame to handle it's event, instead of pygame.event.get()
        screen.blit(screenCopy, (0,0))
        pygame.display.flip()