伤害后的Pygame Flashing Sprite

时间:2015-05-14 18:56:02

标签: python pygame sprite

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

2 个答案:

答案 0 :(得分:1)

您必须通过添加额外属性来专门化您的课程,该属性将显示闪烁状态。 “杀戮”方法可以从任何群体中清除精灵 - 我不知道你上面的片段是什么,影响是什么。如果你正在使用一个小组来实际绘制玩家(自己),那么从那里移除它不是最好的事情。

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

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 

答案 1 :(得分:0)

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)

我希望它对你有用