Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一定时间后更改变量_Python_Variables_Time_Pygame - Fatal编程技术网

Python 在一定时间后更改变量

Python 在一定时间后更改变量,python,variables,time,pygame,Python,Variables,Time,Pygame,我正在做一个游戏,我试图通过每10秒加速敌人的速度,使游戏更难进行 以下是我尝试的方法: def time_pass(self): #timer for main game play self.time_passed = time.clock() if self.time_passed == (self.start_time + 10): self.str_spd1 += 2 self.str_spd2 += 2 self.

我正在做一个游戏,我试图通过每10秒加速敌人的速度,使游戏更难进行

以下是我尝试的方法:

def time_pass(self):
    #timer for main game play
    self.time_passed = time.clock()
    if self.time_passed == (self.start_time + 10):
        self.str_spd1 += 2
        self.str_spd2 += 2
        self.str_spd3 += 2
self.star_time是游戏开始的时间,self.time_经过的时间是程序启动后的秒数

因此,如果游戏已经运行了10秒,速度应该增加2,但只有当时间正好是10秒时,它才会返回

如果我用>代替==像游戏一样的崩溃会导致星星加速

所以我需要一种方法使恒星的速度每10秒增加2


您要使用模数运算符:

if (self.time_passed - self.start_time) % 10 == 0:
    ...

Python2.x没有可靠的方法来计算启动后的秒数

time.clock在Windows以外的任何平台上都是非常错误的,它计算的是CPU时间而不是挂钟时间

时间更近了,因为它是每个站台上的挂钟。它不能保证亚秒精度,但当你只每隔10秒检查一次时,那就没问题了。问题是它不能很好地处理系统时钟的变化。例如,如果您将时钟提前一小时,计时器将不会触发3610秒而不是10秒

幸运的是,PyGame有自己的模块,其功能是专门为处理此类情况而设计的

最简单的方法就是使用pygame.game.set_定时器。不必检查每帧或每一个空闲时间或任何东西的时间,只需添加一个事件处理程序,让PyGame每10秒触发一次该事件

如果这不合适,pygame.time.get_ticks会提供自游戏启动以来的挂钟时间毫秒数,这可能是您希望在Elazar代码中使用的


但是,在决定要做什么之前,阅读链接页面和一些示例是值得的。

好的,我没有看到顶部,哦,我应该想到的是!我添加了它@巴尼·戈文(Barney Govan)的版本更好,如果你每次都这么做的话。这不是OP要求的,但接近他应该要求的。唯一的问题是,在大多数非Windows系统上,它将每10秒CPU时间触发一次,而不是每10秒挂钟时间触发一次,因为time.clock不是挂钟时间。这一个更安全,而且更有可能工作-它处理非整数秒和不规则的方法调用。@abarnert那么你的建议是什么呢?Barney Govan的回答告诉你如何做你要做的事情……但这是一个非常糟糕的主意。无法保证任何时钟滴答声都会在程序启动后10秒或20秒或30秒后精确匹配。例如,一个可能是启动后的9.953秒,下一个可能是启动后的10.004秒。是的,我应该清楚地说明我的问题。所以,几乎从来都不是你想要的。它是Unix上的处理器时间,Windows上的挂钟时间,以及其他平台上的未指定时间。@abarnert那么我应该使用什么来计时???用于以毫秒为单位计算时间,这比我的建议要好,或者是错误的。这取决于time.clock的实现方式。@Elazar:不,这在大多数平台上都不起作用。然而,这正是OP要求的。是的-这假设我们每秒钟都能打电话,时钟是整数秒,在Windows或Unix上都不正确。是的,因为这样它必须正好是10,不是9.678或10.5,但回答非常好。我尝试了这个,但感到非常困惑,但我会再试一次,非常感谢您的帮助@abarnert@ChristianCareaga:查看每个函数链接的示例。如果你尝试了一个解决方案,但遇到了困难,就写一个新问题寻求帮助。
if (self.time_passed - self.start_time) % 10 == 0:
    ...