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()
执行效果如下: