2

我正在 pygame 中制作游戏,我需要我的船在与小行星碰撞后大约 3 秒内免疫。我尝试了我找到的每个功能,但它没有工作。

这是我的代码的碰撞部分:

if collision == True:
    ship_game = ship_destroyed
    lifes -= 1;

然后我有这部分:

if collision:
     pi = True
     collision = False 
     pygame.time.delay(1000)

这个名为 pi 的变量我在发生碰撞时将船放在屏幕中间:

if pi == True:
     ship_game = ship
     pos_ship={'x': WScreen/2, 'y': HScreen/2}
     pi = False

我认为这足以让您理解我的问题。谢谢 :)

4

3 回答 3

4

这可以通过引入一个 在检测到碰撞时collision_immune设置的变量来实现。True同时,您将上次碰撞的时间记录在一个变量collision_time中。您可以从中获取时间pygame.time.get_ticks()。然后在主循环的适当部分(上面未显示),您可以检查自上次碰撞以来的时间是否超过 3 秒并重置collision_immune为 False。这可能看起来像这样

if collision == True:
    ship_game = ship_destroyed
    lifes -= 1;
    collision_immune = True
    collision_time = pygame.time.get_ticks()

然后在某个地方,也许在主循环的开头,你把

if pygame.time.get_ticks() - collision_time > 3000:    # The time is in ms.
    collision_immune = False

现在,您可以在游戏逻辑中使用该变量collision_immune来确定船是否可以免受最近的碰撞。

快乐的游戏!:)

于 2013-06-15T02:24:09.867 回答
2

OOP 风格:

class Ship:

   def immune(self):
      return self.last_collide_time > current_time() - 3000

   def collide(self):
      if self.immune(): return
      self.lifes -= 1
      self.last_collide_time = current_time()
      # ....
于 2013-06-15T02:42:06.680 回答
2

您需要跟踪最后一次碰撞发生的时间(last_collision_time = time.time()),然后在发生碰撞时检查该值是否小于 3 秒前(if time.time() - last_collision_time < 3.:),并按照您认为合适的方式处理它。在这种情况下,显然是通过不让碰撞摧毁船舶。

于 2013-06-15T02:22:33.683 回答