Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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_Wait - Fatal编程技术网

Python 如何在pygame中等待一段时间?

Python 如何在pygame中等待一段时间?,python,time,pygame,wait,Python,Time,Pygame,Wait,自从我开始学习Python和Pygame以来,我一直在代码中使用time.wait,我一直在想是否还有其他方法可以做到这一点,以及每种方法的优缺点是什么。例如,Pygame还有一个Pygame.time.wait。python的等待函数和pygame的等待函数有什么区别?哪一个更好?除了使用这两个函数之外,还有其他方法等待一段时间吗?对于Python,一般来说,您需要查看库 但是,对于Pygame,使用将根据CPU时钟暂停给定的毫秒数以获得更高的精度(与Pygame.time.wait相反)。对

自从我开始学习Python和Pygame以来,我一直在代码中使用time.wait,我一直在想是否还有其他方法可以做到这一点,以及每种方法的优缺点是什么。例如,Pygame还有一个Pygame.time.wait。python的等待函数和pygame的等待函数有什么区别?哪一个更好?除了使用这两个函数之外,还有其他方法等待一段时间吗?

对于Python,一般来说,您需要查看库


但是,对于Pygame,使用将根据CPU时钟暂停给定的毫秒数以获得更高的精度(与Pygame.time.wait相反)。

对于动画/冷却等:如果要“等待”,但仍有代码运行,请使用:


如果您只是等待一段时间,您可以使用或。但是,如果要显示消息然后等待一段时间,则需要事先更新显示。只有在以下任一情况下,显示才会更新: 被称为。见:

这将更新整个显示的内容

此外,您还必须在显示更新在窗口中可见之前,使用处理事件。见:

对于游戏的每一帧,您都需要对事件队列进行某种调用。这确保了您的程序可以在内部与操作系统的其余部分交互

这意味着您必须在
pygame.time.delay()或
pygame.time.wait()之前调用
pygame.display.flip()和
pygame.event.pump()

screen.blit(文本,(x,y))
pygame.display.flip()
pygame.event.pump()
pygame.time.delay(delay*1000)#1秒==1000毫秒
另见


在任何情况下,这都不是典型应用程序中等待或延迟某些内容的方式。您等待时,游戏没有响应。用于测量时间。
例如,如果要在显示器上显示消息,请获取当前时间并计算消息消失后的时间点。只要当前时间低于计算时间,则显示消息:

消息结束时间=0
运行=真
运行时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
# [...]
当前时间=pygame.time.get_ticks()
如果发生了什么事情:
message\u surf=font.render('maintal message!',True,(255,0,0))
message_end_time=pygame.time.get_ticks()+3000#显示3秒
窗口填充(0)
# [...]
如果当前时间<消息结束时间:
窗口。blit(消息(x,y))
pygame.display.flip()
另见


最简单的例子:

导入pygame
pygame.init()
font=pygame.font.SysFont(无,50)
text=font.render('按键或鼠标',True,(255,0,0))
window=pygame.display.set_模式((500200))
clock=pygame.time.clock()
message\u end\u time=pygame.time.get\u ticks()+3000
运行=真
运行时:
时钟滴答(60)
当前时间=pygame.time.get_ticks()
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYDOWN:
text=font.render(pygame.key.name(event.key)+“pressed”,True,(255,0,0))
message\u end\u time=pygame.time.get\u ticks()+2000
如果event.type==pygame.MOUSEBUTTONDOWN:
text=font.render('button'+str(event.button)+'pressed',True,(255,0,0))
message\u end\u time=pygame.time.get\u ticks()+2000
窗口填充(0)
如果当前时间<消息结束时间:
blit(text,text.get_rect(center=window.get_rect().center))
pygame.display.flip()
pygame.quit()
退出()

我通常使用一个计时器对象,这样在我执行以下操作时,其余代码可以继续运行:
class Unit():
    def __init__(self):
        self.last = pygame.time.get_ticks()
        self.cooldown = 300    

    def fire(self):
        # fire gun, only if cooldown has been 0.3 seconds since last
        now = pygame.time.get_ticks()
        if now - self.last >= self.cooldown:
            self.last = now
            spawn_bullet()