Python Pygame闪动精灵伤害后

Python Pygame闪动精灵伤害后,python,pygame,sprite,Python,Pygame,Sprite,我使用pygame继续我的工作,我正在处理玩家精灵,特别是当它受到伤害时。我想做的是,当玩家受到敌人的伤害时,我希望玩家的精灵闪烁2-3次,给玩家一秒或两秒的时间从受到伤害的地方移动。我有一个健康栏(3颗心),我设置它,这样每当敌人和玩家精灵发生碰撞时,它都会移除1颗。我正在使用kill()函数(我知道这是错误的,因为它完全删除了精灵)。我怎样才能让精灵闪烁一两秒钟呢。任何帮助或建议都将不胜感激。多谢各位 enemy_hit_list = pygame.sprite.spritecoll

我使用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()         

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

例如,您可以在精灵上设置“hit_倒计时”属性,并使用其更新方法相应地更改其图像,并测量其恢复正常的时间:

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 
我用它来计时40秒,效果很好。更新方法是不断增加效果的红色值。在使用RGB_添加命令以纯色填充之前,可以使用其他颜色或使用此颜色填充

self.cp.fill((0, 0, 0, 255), None, pygame.BLEND_RGBA_MULT)
我希望它对你有用

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