0

我正在制作一个 pygame 并试图通过每十秒加速你的敌人来使游戏越来越难

这是我尝试的方法:

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_passed的时间,是程序开始后的时间,以秒为单位

所以如果游戏已经运行了 10 秒,速度应该增加 2,但它只在时间正好是 10 时发生,然后它会返回

如果我改用>类似==崩溃的游戏会导致星星加速

所以我需要一种方法来让它每十秒钟星星的速度就会增加2

4

3 回答 3

3

Python 2.x 没有可靠的方法来计算自发布以来的秒数。

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

time.time()更接近,因为它是每个平台上的挂钟。不能保证具有亚秒级精度,但是当您仅每 10 秒检查一次时,这没问题。问题是它不能很好地处理系统时钟的变化。例如,如果您将时钟提前一小时,则计时器不会在 3610 秒内触发,而不仅仅是 10 秒。

幸运的是,PyGame有它的pygame.time模块,具有专门用于处理此类情况的功能。

最简单的方法就是使用pygame.game.set_timer. 无需检查每帧或每个空闲滴答或其他任何时间,只需添加一个事件处理程序并要求 PyGame 每 10 秒触发一次该事件。

如果这不合适,则为pygame.time.get_ticks您提供自游戏开始以来挂钟时间的毫秒数,这可能是您希望与 Elazar 的代码一起使用的。

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

于 2013-06-19T23:42:50.117 回答
2

__init__self.i = 0

if self.time_passed >= (self.start_time + 10 * self.i):
    self.i += 1
    ...
于 2013-06-19T23:25:06.967 回答
2

您想使用模数运算符:

if (self.time_passed - self.start_time) % 10 == 0:
    ...
于 2013-06-19T23:27:47.500 回答