我正在使用pygame在python中进行游戏。我想知道我是否可以在if语句中使用pygame.time.Clock来增加这样的变量:
mainclock = pygame.time.Clock()
score = 0
while True:
if mainclock == 0:
score += 1
我希望得分每秒增加一个,如果我正确理解时钟(),这应该可行,但我不知道是否或如何在if语句中使用Clock()。 感谢您提前提供任何帮助。
答案 0 :(得分:1)
对PyGame中时间和时间测量的工作方式存在重大误解。您可以使用pygame.time.Clock(),但方式完全不同。
注意:此处的所有代码示例均为Python 3.4;如果您仍然使用Python 2.x并且在使用代码时遇到问题,请随时询问。
基础知识
你的脚本尽可能快地运行,所以基本上你的操作系统的每个滴答,都要处理一次,这取决于你的计算机的CPU每秒大约100次。
现在出现第二个问题:Clock()是模块中的一个类" time" Pygame,它本身没有任何价值。如果你让你的程序打印" mainclock",那么yield将是:它永远不会等于0,因此你的if语句将永远不会产生True,因此永远不会被处理(所以永远不要将1添加到& #34;得分"。)
你了解这部分吗?如果没有,请随时提出进一步的问题!为了使用基本上任何编程语言(至少是面向对象的语言),这些是你必须理解的一些基础知识。
如何解决您的问题
你需要pygame.time.Clock()才能解决你的问题,但方式与你所做的不同。将变量定义为游戏的时钟,就像你已经使用" mainclock":
mainclock = pygame.time.Clock()
Clock()类有一个名为" .tick()"的方法。此方法测量自上次滴答过去以来的时间。试一试:将代码更改为此内容并查看其打印内容!
while True:
print(mainclock.tick())
或者在Python 2.x中: 而真: print mainclock.tick()
每次处理完脚本后,您都会收到一个值(即#" tick")。在我的电脑上打印了几个数字:
>>>
0
35
1
2
2
1
1
1
2
等...
这是自上次处理脚本以来的mili-seconds。这意味着:当1000 mili-seconds过去时,已经过了一整秒。现在将它用于我们的目的,我们只需将它们加在一起!
mainclock = pygame.time.Clock()
tick_count = 0
score = 0
while True:
tick_count += mainclock.tick()
if tick_count >= 1000:
score += 1
tick_count = 0
print(score)
另一种方法是限制帧速率。这可以通过向" .tick()"添加数值来实现。 Clock()的方法。
while True
mainclock.tick(60)
这将导致您的脚本永远不会超过每秒60次(建议:让您的脚本打印mainclock.tick(60)并查看它产生的内容!)。现在我们可以做两件事:要么我们采取这个事实并将一秒钟除以60,要么我们仍然像以前那样衡量时间:
方法一 - 测量时间
mainclock = pygame.time.Clock()
tick_count = 0
score = 0
while True:
tick_count += mainclock.tick(60)
if tick_count >= 1000:
score += 1
tick_count = 0
print(score)
你看,这里没有重大变化。我们只是告诉脚本每秒运行速度不超过60次,其余部分保持不变。如果你打印" mainclock.tick(60)",你现在将收到每个循环16或17的值,因为它等待在刻度之间的那个时间,以确保它没有每秒运行60次以上。
方法二 - 分秒......
由于我们告诉程序每秒运行速度不超过60次,这也意味着一个滴答需要1/60秒。我们也可以这样做:
mainclock = pygame.time.Clock()
tick_count = 0
score = 0
while True:
tick_count += 1/60 # NOTE: in Python 2.x this has to be: 1.0/60 or 1/60.0!
if tick_count >= 1:
tick_count = 0
score += 1
print(score)
或者:
mainclock = pygame.time.Clock()
tick_count = 1
score = 0
while True:
tick_count -= 1/60.0
if tick_count <= 0:
tick_count = 1
score += 1
print(score)
希望,这有帮助!否则可以随意提问。