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

Python 我可以在if语句中使用pygame.time.Clock吗?,python,pygame,Python,Pygame,我正在使用pygame编写python游戏。我想知道我是否可以在if语句中使用pygame.time.Clock来增加如下变量: mainclock = pygame.time.Clock() score = 0 while True: if mainclock == 0: score += 1 我希望分数每秒钟增加一分,如果我正确理解Clock(),这应该会起作用,但我不知道在if语句中是否或如何使用Clock()。 提前感谢您的帮助。对于PyGame中时间和时间度

我正在使用pygame编写python游戏。我想知道我是否可以在if语句中使用pygame.time.Clock来增加如下变量:

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

while True:
    if mainclock == 0:
        score += 1
我希望分数每秒钟增加一分,如果我正确理解Clock(),这应该会起作用,但我不知道在if语句中是否或如何使用Clock()。
提前感谢您的帮助。

对于PyGame中时间和时间度量的工作原理存在严重误解。您可以使用pygame.time.Clock(),但方式完全不同

注意:下面的所有代码示例都是Python 3.4;如果您仍然使用Python2.x,并且在使用代码时遇到问题,请随时询问

一些基础知识

您的脚本运行速度尽可能快,因此基本上操作系统的每一个滴答声都会处理一次,也就是说,取决于计算机的CPU,大约每秒处理100次

现在是第二个问题:Clock()是Pygame“time”模块中的一个类,它本身没有任何价值。如果你让你的程序打印“mainclock”,收益率将是:永远不会等于0,因此你的If语句永远不会产生True,因此永远不会被处理(因此永远不会在“score”中加1)

你明白这部分了吗?如果没有,请随时提问!为了使用基本上所有的编程语言(至少是面向对象的编程语言),您必须了解这些基础知识

如何解决您的问题

您需要pygame.time.Clock()来解决您的问题,但方式与您所做的不同。定义一个变量作为游戏的时钟,就像您已经使用“mainclock”一样:

Clock()类有一个名为“.tick()”的方法。此方法测量自最后一次勾选以来的时间。试试看:把你的代码改成这个,看看它打印了什么

while True:
    print(mainclock.tick())
或者在Python 2.x中: 尽管如此: 打印mainclock.tick()

每次处理脚本时都会收到一个值(称为“勾号”)。在我的电脑上,这会打印几个数字:

>>>
0
35
1
2
2
1
1
1
2
等等

这是自上次处理脚本以来的毫秒数。这意味着:当1000毫秒过去时,整整一秒钟过去了。现在要将其用于我们的目的,我们只需将它们添加到一起

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)
另一种方法是限制帧率。这可以通过向Clock()的“.tick()”方法添加一个数字值来实现

这将导致您的脚本的运行速度永远不会超过每秒60次(建议:让您的脚本打印mainclock.tick(60)并查看它的结果!)。现在我们可以做两件事:要么我们接受这个事实,将1秒除以60,要么我们仍然像以前一样测量时间:

方法一-像以前一样测量时间

你看,这里没有大的变化。我们只是告诉脚本不要以每秒60次的速度运行,其余的保持不变。如果您打印“mainclock.tick(60)”,您现在将收到每个循环16或17的值,因为它会在两次tick之间等待大约一段时间,以确保其每秒运行的次数不会超过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)
mainclock=pygame.time.Clock()
勾选计数=1
分数=0
尽管如此:
勾号计数-=1/60.0

如果勾选计数而不是直接回答你的问题,你可能需要重新思考如何处理时间。有两种常用的方法:1。恒定的帧长度。2.可变帧长。在第一种方法中,你认为每一帧都是一个X分数(通常为60),所以每次你只增加值/X。在第二种方法中,你将时间增量递增,并将其乘以每秒的值。
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)
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)