跟着元气学编程【17】:我还原了元气的状态栏?
2021/10/03231 浏览综合
上一期我们添加了怪物子弹,但是目前怪物子弹就是个摆设,命中后什么也不会发生。是时候让怪物站起来了!
首先打开存储怪物类的文件,给每个怪物添加上血量

我们的子弹和怪物的子弹也要有相应的攻击力。在settings中添加相应数据

然后先把这些零散的数据扔到一边,给角色添加血量,护盾等数据

(然后我们就又多了3个零散的数据……)
开始编写怪物子弹击中人物后的逻辑代码

(里面有很多关于状态栏更新的代码,这个放最后再讲)
故技重施,大致的逻辑还可以用于我们的子弹

然后下面才是本期的重点。众所周知,元气左上角会有一个人物的状态栏,这么灵魂的东西不复原总感觉少了什么。但是我并不会画画,这玩意要是让我自己画就直接画风崩坏

(这其实是我已经尽力后画出来的……还是照着原图画的)
我就开了一盘游戏,然后把原版的状态栏直接截下来

我想着这个数字我可以自己加,就打开画图3D,用同样的背景颜色覆盖掉数字,效果大概是这样

(整挺好,不细看其实看不出来差别)
再开一个新文件statics,先把这个贴图画在正确的地方再说

(最后还是update_screen()函数承担一切)
Pygame可以把字体渲染成一幅图像,那就再开一个新文件static_text,专门写三种数据的文字图像

(只用写第一个类,剩下的基本相似,直接继承过去就好了)
在文件sk里创建实例,然后在update_screen()里添加相关代码。所以效果大概是这样

(高仿!)
但是这就是个贴图,血量减少后数字也要改变,红条也要变短。但是红条灰条蓝条是一个整体,没办法单独减少。所以……

我们可以逆向思维,把血量减少后出现的褐色背景画出来,覆盖住原来的血量,这样就造成了血量减少的假象!

(在文件statics里写的。三种褐色条其实是一种,但是由于位置不一样我写了三个类。没有继承是因为继承了也省不了多少代码,就懒得改了)
文字已经提前留了一个变量,到时候直接调用prep_msg()方法就能更改。现在再看之前怪物子弹的相关代码就能看懂了(吧?)

(然后把这个函数套到update_enemy_bullets()中,就大功告成了!)
另外别忘了画出来。记住顺序很重要,有一个错了可能就画不出来

是不是发现update_screen()的参数中混进去几个陌生的面孔?它们其实是当某种数据小于一半时的感叹号。因为比较简单就不多讲了


(上面是相关代码)
最后,添加一个布尔类型的变量,记录游戏是否结束。

如果人物的血量小于等于0,就更改为False

我们还要判断主循环中哪些代码需要一直执行,哪些只有在人物有血量时才执行

(我个人理解觉得人物如果死了怪物也不用动了。但是原版怪物还在动(可能是人物还能复活),总之有待考虑)
现在,当人物的血量小于等于0时,游戏就会暂停。(主要是因为没有死亡贴图,不然这期顺便把死亡做出来)最后放一下目前这个游戏的运行效果
(由于单手操作没有办法演示射击怪物(但是实测可以实现预期效果))
上期其实遗留了一个异常,但是我今天打算修复的时候发现卡不出来了,就不知道怎么修。根据视频也能发现目前护盾不会自动回复(感觉这个逻辑有点难写),而且没有大大简化操作的自动瞄准。这些烂摊子就留到下一期吧