如何使对象暂时无敌?

时间:2013-06-15 01:46:52

标签: python time pygame

我正在玩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

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

3 个答案:

答案 0 :(得分: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来确定船舶是否免受最近的碰撞。

快乐的pygaming! :)

答案 1 :(得分:2)

您需要跟踪上次发生碰撞的时间(last_collision_time = time.time()),然后发生碰撞时检查该值是否小于3秒(if time.time() - last_collision_time < 3.:)并处理它你认为合适。在这种情况下,通过没有碰撞就可以清除船只。

答案 2 :(得分: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()
      # ....