【问题标题】:How to make an object have temporary invincibility?如何让一个物体暂时无敌?
【发布时间】:2013-06-11 18:01:14
【问题描述】:

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

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

【问题讨论】:

    标签: python time pygame


    【解决方案1】:

    这可以通过引入变量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 来确定船是否能够免受近期碰撞的影响。

    玩得开心! :)

    【讨论】:

    • 没问题,很高兴为您提供帮助。 :)
    【解决方案2】:

    您需要跟踪上次发生碰撞的时间 (last_collision_time = time.time()),然后在发生碰撞时检查该值是否小于 3 秒前 (if time.time() - last_collision_time < 3.:) 并按您所见进行处理合身。在这种情况下,显然是通过不让碰撞摧毁船。

    【讨论】:

      【解决方案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()
            # ....
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-08
        • 1970-01-01
        • 2015-04-28
        • 2023-03-16
        相关资源
        最近更新 更多