同人游戏制作:跟着元气学编程【16】

修改于2021/10/03569 浏览综合
借助这周请假在家的两天,我完成了之前拖了两周的没有写出来的怪物子弹😀。成品其实也没什么难的知识点,只是相关的逻辑有点难摸索,之前写的代码有一些要增加和重写,拖这么久主要还是因为之前我一直拖着不想写(B站真好看)
之前我一直想着偷懒,生成六种怪物只用一种代码。增加怪物子弹的时候我发现出大问题,因为每个怪物发射的子弹都应该是独立的,即有多少怪物有多少对应的子弹编组。后期还要记录不同怪物的生命值,攻击力,所以我们要写六种类,记录不同的数据
TapTap
(其实就是把之前的复制六份,再把怪物贴图这一块稍微改动一下,增加一些数据就行了。注意图中的Enemy5类和别的不一样,它没有update()方法,等会就知道为什么了😶)
在我们写怪物子弹的相关代码前,我们需要弄清楚相关的逻辑。下面是坐标系以及不同方向的x,y增减情况
TapTap
(电脑上随手画的,确实有亿点丑。)
子弹实例化那一刻会获取主角那一刻的坐标,从子弹初始坐标到主角初始坐标可以转化为这样一个数学问题
TapTap
(随机AB两点,过两点画一条直线。这条直线上所有的坐标有什么规律吗?)
可以看到我在右上角写出了两个坐标(随便写的,为了满足随机的条件),但是我根本就没有发现任何的规律,没有任何一个公式可以把一个坐标转化为另一个。
所以我去学校问了数学老师(当时我给了他两道题,语言没这么精简,旁边有我相关编程的推理),结果他没看懂题……对,题都没看懂……(他还是教奥数的,是我表达不好吗?)好朋友研究一天后,宣布放弃😐
最后我一边写一边发现了一个跟数学好像没有关系的解决办法😃。开一个新文件,用来写EnemyBullet类
TapTap
写完后在game_functions中添加相关函数,顺便改一下之前的
TapTap
(增加有关怪物子弹的函数,包括创建子弹和更新/删除子弹)
TapTap
(修改创建怪物的函数)
TapTap
(update_screen()再填一员!)
最后,在主文件添加我们加的东西,就完成了!
TapTap
效果视频:
(我玩不来,全是弹幕,躲都躲不掉。另外补发了一个视频,但是在我的手机上播放不了,看看在这里行不行?)
还有一些bug,有时候会触发有时候又不会
TapTap
(比如这个。我以为是当x或y其中一个差值为0时会报错,结果却不是每次都这样。排查问题中,如果找不到就直接用try-except代码块吧)
下一期目标:添加血量等相关游戏数据。下个月见!🙃
21
1
13