Pygame,在设定的时间内绘制同一帧
Pygame, Draw the same frame for a set amount of time
我想显示一条消息两秒钟。
我现在使用的逻辑是让代码在 pygame.display.flip
之后使用 pygame.time.delay(2000)
等待。
一个简短的例子:(我在我的代码上经常使用这个翻转延迟)
write_gui("{0} has appeared".format(monster.name), BLUE, 24, TEXT_CORNER_X, TEXT_CORNER_Y)
pygame.display.flip()
pygame.time.delay(2000)
这确实有效,但它倾向于 "hang" 整个过程,因此当发生这种情况时,我会因此遇到一些错误,主要是一些帧丢失,因为程序可以跟上睡眠-觉醒周期。
所以我现在想的是画同一个框两秒。
那么你们建议我应该做什么?
因为我的一个答案是将每次翻转放在一个 while 循环中,所以必须有更好的行保守方法来解决这个问题。
你的程序 "hangs" 因为你在睡觉时不调用 pygame.event.get()
,pygame.event.get()
让 pygame 处理它的内部事件。
最简单的解决方法是使用 dt = clock.tick()
中的 return 值,在这种情况下 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()
此函数将等待指定的时间并保持调用前的屏幕。
我想显示一条消息两秒钟。
我现在使用的逻辑是让代码在 pygame.display.flip
之后使用 pygame.time.delay(2000)
等待。
一个简短的例子:(我在我的代码上经常使用这个翻转延迟)
write_gui("{0} has appeared".format(monster.name), BLUE, 24, TEXT_CORNER_X, TEXT_CORNER_Y)
pygame.display.flip()
pygame.time.delay(2000)
这确实有效,但它倾向于 "hang" 整个过程,因此当发生这种情况时,我会因此遇到一些错误,主要是一些帧丢失,因为程序可以跟上睡眠-觉醒周期。
所以我现在想的是画同一个框两秒。
那么你们建议我应该做什么?
因为我的一个答案是将每次翻转放在一个 while 循环中,所以必须有更好的行保守方法来解决这个问题。
你的程序 "hangs" 因为你在睡觉时不调用 pygame.event.get()
,pygame.event.get()
让 pygame 处理它的内部事件。
最简单的解决方法是使用 dt = clock.tick()
中的 return 值,在这种情况下 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()
此函数将等待指定的时间并保持调用前的屏幕。