Python 我可以在if语句中使用pygame.time.Clock吗?
我正在使用pygame编写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中时间和时间度
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)