如何使一个对象暂时无敌



我正在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
我想这足以让你理解我的问题。谢谢:)

这可以通过引入一个变量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快乐!:)

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

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()
      # ....

最新更新