pygame飞机大战用精灵组(sprite)的层(layer)编写(四)BOSS要有生命

BOSS说,要有生命,于是便有了生命。

为了显得自己的命长,boss经常干的傻事是亮底裤给别人看,来吧,凡人,看看我的血量。

生命条的绘制可以用一条带宽度的线或者一个填满颜色的矩形,都行。

先得把boss的生命值和满血时是生命值传入,可以计算剩余血量的比例,绘制动态血条。

如果向让血条跟着BOSS一起舞动,还得传入BOSS的坐标。

所以干脆传入一个对象 self吧。血条的层归属allgroup,它只是用来显示,没碰撞检查之类的,所以绘制一下就行了。

当BOSS没有血的时候,它也随之烟消云散了。

from setting import *


class Lifebar(pygame.sprite.Sprite):
        """
        显示一条和BOSS宽度一样的血条
            随着BOSS生命的减少,按比例减少,当BOSS毁灭时,也跟着殉葬 """
        def __init__(self, boss):
            self.groups = allgroup
            self.boss = boss
            self._layer = self.boss._layer
            pygame.sprite.Sprite.__init__(self, self.groups)
            self.oldpercent = 0
            self.paint()
            
        def paint(self):
            self.image = pygame.Surface((self.boss.rect.width,12))
            self.image.set_colorkey((0,0,0)) # 黑色透明
            #设置边框
            pygame.draw.rect(self.image, (0,255,0), (0,0,self.boss.rect.width,10),1)
            pygame.draw.rect(self.image,(0,255,0),(0,0,self.boss.rect.width,10),10)
            self.rect = self.image.get_rect()
 
        def update(self):
            self.percent = self.boss.HP / self.boss.HPFULL * 1.0
            #x血量变化后,重绘
            if self.percent != self.oldpercent:
                self.paint() # bOSS变形后,血条尺寸会变的,需要重新计算尺寸
                #设置底色黑色,加上paint的colorkey,黑色就变透明色了。
                pygame.draw.rect(self.image, (0,0,0), (1,1,self.boss.rect.width-2,10)) 
                #绘制
                pygame.draw.rect(self.image, (255,0,0), (1,1,int(self.boss.rect.width * self.percent),10)) 
            self.oldpercent = self.percent
            self.rect.centerx = self.boss.rect.centerx
            self.rect.centery = self.boss.rect.centery - self.boss.rect.height /2 - 10
            if self.boss.HP < 1:  # 你亡我也亡
                self.kill()

在boss.py里添加血量,添加血条,很简单的几行代码

def __init__(self):
        #添加
        self.HP = 500
        self.HPFULL = 500
        lifebar = Lifebar(self)

血条出现了,没少血,看不出效果。

那么在update里添加

self.HP -= 1

血条没几秒就没了。

把BOSS也灭了吧。

在update里添加

if self.HP <=0:

    self.kill()

执行效果如下:

猜你喜欢

转载自blog.csdn.net/hailler1119/article/details/88929518