pygame 飞机大战飞机、BOSS信息的显示

目标,显示英雄飞机的得分,生命值,BOSS机的动态生命条

战斗界面中,信息数据是必不可少的,一般都包括得分值,当遇到BOSS时,还会显示BOSS的动态生命条,还有其他的飞机数量,炸弹数量等。不管生命信息,原理都是一样的。

假设你有一个BOSS类,继承于pygame.sprite.Sprite,BOSS有HP值属性。

还有英雄飞机,继承于pygame.sprite.Sprite,属性里有得分和生命。

显示信息一般在主类里,用 pygame.Surface.blit()来绘制,在主类里面取得所需的HP值,得分,生命。用类似

# 绘制玩家信息

hero_info = self.my_font.render('score:' + str(self.hero_score), True,

(255, 0, 0))

hero_life = self.my_font.render("生命:" + str(self.hero.HP), True,

(0, 255, 0))

self.scene.blit(hero_info, (0, 0))

self.scene.blit(hero_life, (self.size[0] - 100, 0))

这样的方法在屏幕显示。

但是当显示的信息是多样化,列如要显示BOSS的生命条,要显示小BOSS的生命条,生命条要随飞机移动,要显示伤害值等等数据或者图像的时候,在主函数里就显得不大方便了,管理起来很麻烦。

其实可以在每个sprite里设置各自的显示方式,对自己的显示方式进行自己管理。

pygame.sprite.Group()里的draw函数,只能显示sprite,不能对在sprite里的其他图像进行显示。所以还得在主类里添加显示的代码。

例如在boss类里添加自己的绘制函数例如draw_life_indicate(self),在函数里,对BOSS的生命进行计算,绘制生命条,设置显示位置等操作。

在主函数里只需添加一行代码就行了。

列如在BOSS里中添加draw_life_indicate(self)函数 初设HP为100,所以剩下的比例为 self.HP/100

当半血以上时,用绿色条显示生命值,当小于半血时,用红色,当小于等于零时,自毁。

    def draw_life_indicate(self):
        hp_remain = self.HP/100
        
        if self.HP <= 0:
            self.kill()

        if hp_remain > 0.50:
            # print(hp_remain)
            pygame.draw.line(self.main_scene, (0, 255, 0),
                                (200, 0), (200+300*hp_remain, 0), 30)
        else:
            self.motion_type = 1
            pygame.draw.line(self.main_scene, (255, 0, 0),
                                (200, 0), (200+300*hp_remain, 0), 30)

在主函数里添加:

        if self.boss_sprite:
            for boss in self.boss_sprite:
                #显示BOSS的生命条。
                boss.draw_life_indicate()

其中self.boss_sprite= pygame.sprite.Group()或者

self.boss_sprite = pygame.sprite.RenderUpdates()

RenderUpdates(Group)继承至Group,强化了一下他的draw()函数,对变化的图像进行重新绘制,不变化的不绘制,提高运行速度,静态画面多的游戏里使用,可以提高游戏性能。飞机大战这种几乎都在动的游戏,没提升。

猜你喜欢

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