【问题标题】:Pygame Flashing Sprite After DamagePygame 损坏后闪烁的精灵
【发布时间】:2015-07-26 12:44:58
【问题描述】:

我正在使用 pygame 继续我的工作,我正在制作玩家精灵,特别是当它受到伤害时。我想做的是当玩家受到敌人的伤害时,我希望玩家精灵闪烁 2-3 次,让玩家有一两秒钟的时间从受到伤害的地方移动。我有一个生命值条(3 颗心),我将其设置为每次敌人与玩家精灵发生碰撞时,它都会删除 1。我正在使用 kill() 函数(我知道这是错误的,因为它完全删除精灵)。我怎样才能让精灵闪烁一两秒钟。任何帮助或建议将不胜感激。谢谢。

    enemy_hit_list = pygame.sprite.spritecollide(self, self.level.enemy_list, False)
    if enemy_hit_list:
        self.health -= 1
        self.kill()         

【问题讨论】:

    标签: python pygame sprite


    【解决方案1】:

    您必须通过在其中添加一个额外的属性来专门化您的课程,该属性将向您显示闪烁状态。 “kill”方法从任何组中删除精灵 - 我无法从上面的 sn-p 中知道你是否是,以及效果是什么。如果您使用组来实际绘制玩家(自己),则将其从那里移除并不是最好的做法。

    例如,您可以在您的 sprite 上添加一个“hit_countdown”属性,并使用它的 update 方法相应地更改它的图像,并测量它恢复正常的时间:

    class Player(Sprite):
       def __init__(self, ...):
           ...
           self.hit_countdown = 0
           ...
    
       def update(self, ...):
           if self.hit_coundown:
               if not hasattr(self, original_image):
                  self.original_image = self.image
               if self.hit_countdown % 2:
                  self.image = None # (or other suitable pre-loaded image)
               else:
                  self.image = self.original_image
               self.hit_countdown = max(0, self.hit_countdown - 1)
           super(Player, self).update(...)
    # and on your hit code above:
    ...
    if enemy_hit_list:
        self.health -= 1
        self.hit_countdown = 6 
    

    【讨论】:

      【解决方案2】:
      def __init__(self):
          super(classname,self).__init__()
          self.image,self.rect = load_image("character.png")
          self.value = 0
          self.newColor = [0,0,0,0]
      
      def update(self):
          self.cp = self.image.copy()
          self.value += 50
          self.newColor[0] = self.value%255 
          self.cp.fill(self.newColor[0:3] + [0,], None, pygame.BLEND_RGBA_ADD)
      
      def render(self,screen):
          screen.blit(self.cp,self.rect)
      

      我将它与时钟滴答 40 一起使用并且运行良好。更新方法不断增加红色值以获得效果。您可以在 RGB_ADD 命令之前使用其他颜色或填充此颜色以填充纯色。

      self.cp.fill((0, 0, 0, 255), None, pygame.BLEND_RGBA_MULT)
      

      希望对你有用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多