同人游戏制作:跟着元气学编程〔13〕
2021/08/18316 浏览创意同人
今日任务:优化之前的细节并实现子弹与怪物的碰撞
(事实上,碰撞连三行代码都不用,反而是优化要更复杂……)
回顾我们的子弹,你会发现它是从人物的头上发射出来并垂直向上。但是人物都有武器了,子弹要是不从枪口发射,这合理吗?所以我们现在可以优化子弹的一些细节
(1)将子弹的rect值创建在枪口。左右的枪口位置不一样,所以要做好分类讨论的准备
新增形参weapon

当武器朝向改变时(其实就是人物朝向改变),同时修改子弹的生成坐标

(2):子弹的飞行。现在的子弹垂直向上,而枪口明明朝左右,所以也要分类讨论更改。想要完成这个,我们需要记录当前的朝向
这里我是在man类里编写

方向属性用数字记录。现在我们在方法update()中关于左右的语句里添加修改方向的代码

一般来说,跟移动有关的方向属性用数字记录要比用文字好。虽然数字没有文字那么直观,但是更改会更方便,利用在小学就学的正负数还可以大大简化代码

子弹的飞行范围也需要更改。因为有两种背景,我们还是要分类讨论

(还是根据自己的电脑实际数据进行测算。不过我猜没有几个人跟着做的)
一个小细节:我们的子弹现在还是竖着的,有什么办法可以更快地将子弹转一个方向?
(你想了吗你就往下看?)
(想了吗想了吗?我写这个系列是真的想教会你们)
好吧我水了很长的篇幅。其实没必要把子弹转过来,把长宽反过来就行了

(不会吧不会吧,不会真的有人想得很复杂吧?)
emmm...我第一次写到这的时候完全忘记了有settings的存在,所以我第一次是写了一个函数想把子弹反过来(好久以前初学的事了,我现在已经完全不知道该怎么写那一点用都没有的破函数了 (●—●))
现在我们的子弹就很科学了!如果子弹不是直接穿过怪物就更科学了。现在我们来编写碰撞

再给主循环中的gf.update_bullets()添加每个形参对应的实参

(这张怎么有点诡异呢……)
然后就……结束了!目前游戏的效果大概是这样的(击杀敌人拍不出来,游戏完工后拍个视频记录一下我自己通关这个山寨复刻版(doge))


(你肯定对我拍这个什么都没有的房间十分疑惑。我只是想告诉你怪物被我打完了!)
已稍微修复的问题:为了减弱卡顿的影响,我第一次听从大佬的建议设置了游戏帧数,每秒60帧。结果人物移动速度倒是没有区别了,就是掉帧了,一卡一卡的(我的破电脑啊……)。这次我用大家都在用的.convert_alpha(),感觉确实流畅了一点(也可能是心理作用)
总结:修复了,但没有完全修复
新问题:在刚进入游戏时无法发射子弹。这个问题不大,因为Pygame运行速度慢,要等一会它才能加载出相关的代码,过一会就好了
下次看哪个简单就先写哪个吧,我怕预告放出来结果自己又不会
我毕竟不是专业的,写的代码不太好看,甚至有点乱,大家多多包涵啊(๑><๑)