我可以在if语句中使用pygame.time.Clock吗?

时间:2014-12-03 07:40:46

标签: python pygame

我正在使用pygame在python中进行游戏。我想知道我是否可以在if语句中使用pygame.time.Clock来增加这样的变量:

mainclock = pygame.time.Clock()
score = 0

while True:
    if mainclock == 0:
        score += 1

我希望得分每秒增加一个,如果我正确理解时钟(),这应该可行,但我不知道是否或如何在if语句中使用Clock()。 感谢您提前提供任何帮助。

1 个答案:

答案 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)

希望,这有帮助!否则可以随意提问。

相关问题