2014-12-03 43 views
0

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

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

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

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

+0

虽然不是对您的问题的直接回答,但您可能想重新思考如何处理时间。有两种常用方法:1.恒定的帧长度。 2.可变的帧长。在第一种方法中,您将每个帧视为一秒的X分数(通常为60),因此每次只需添加值/ X。在第二种方法中,您将时间增量传递给它并将其乘以每秒的值。 – user3820547 2014-12-03 07:55:26

回答

1

对PyGame中的时间和时间测量工作有一个主要的误解。您可以使用pygame.time.Clock(),但采用完全不同的方式。

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

的一些基本知识

你的脚本运行尽可能地快,所以基本上与您的操作系统的每一个滴答,你拥有了它处理一次,这是根据计算机的CPU每秒某处大约100倍。

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

你了解这部分?如果没有,请随时提出进一步的问题!这些是你必须理解的一些非常基础的东西,以便基本上使用任何编程语言(至少是面向对象的)。

如何解决您的问题

您需要pygame.time.Clock()为了解决您的问题,但在比你做了什么不同的方式。定义一个变量为您的游戏的时钟,就像你用“mainclock”确实已经:

mainclock = pygame.time.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()”方法中添加数字值来完成。

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) 

希望,这有助于!否则,请随时多问。

相关问题