我正在用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我想这足以让你理解我的问题了。谢谢您:)
发布于 2013-06-15 10:24:10
这可以通过在检测到冲突时设置为True的变量collision_immune来实现。同时,在变量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-15 10:22:34
您需要跟踪上次发生冲突的时间(last_collision_time = time.time()),然后当发生冲突时,检查该值是否小于3秒前(if time.time() - last_collision_time < 3.:),并按您认为合适的方式进行处理。在这种情况下,很明显,没有碰撞就会毁掉船。
发布于 2013-06-15 10:42:07
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()
      # ....https://stackoverflow.com/questions/17119464
复制相似问题