是的,我忙到了现在,从昨天早上八九点开始,到现在,刚好凌晨1点,目的是为飞机大战游戏里面的敌方大飞机,添加主动攻击的子弹效果。
结果是,结果了白天的各种逻辑、编码陷阱,就刚刚,完美解决了。
确实值得发文总结下。
本次实现的功能,是让敌方大飞机每200帧主动发射一排(5颗)子弹,发射方向为Y轴从上到下,子弹速度为5像素/帧。
本次遇到了很多错误的场景,比如:1、飞机发的子弹只能跑200像素,就不跑了;2、多个飞机在同一屏幕出现的时候,只有一架飞机在发子弹;3、初始状态,飞机直接一次性甩下来30颗(6排)子弹,然后后续的子弹发射频率才趋于正常;4、飞机飞到屏幕下方后,上面明明没有新的飞机,却飞出几排子弹,维持了几秒就消失了…
大部分的问题都初步解决了,最后的问题出现在:
几乎将要实现发射功能的时候,觉得每排子弹之间的间隔太短了,我方飞机都没有空间去攻击敌方大飞机,造成游戏体验不够好,于是打算通过调整if not(delay % a):的参数大小进行控制,这个a就代表着过a帧装载一批子弹。然后当我将a设置为100的时候都能正常运行,而设置为200或者150,甚至110都不行的时候,还挺困惑的,觉得怎么这个赋值这么奇怪。就在那么一瞬间,突然醒悟,原来我的delay在系统中的初始值设置的是100,每帧自动减1,来进行延迟控制,减到0后重新赋值100,进行循环。这就是真正的问题根因所在,将delay的初始值设置为200,所有问题解决,完美实现敌方大飞机主动攻击功能。
当然,delay从100变为200,也意味着其他所有的通过if not(delay % x)进行延迟控制(比如:飞机的爆炸延迟效果、核弹的爆炸效果等)的时间都增长了一倍,比如以前是3帧完成的效果,现在变成了6帧完成,让动画的动态时间变得更长了,实际观察了下,效果比之前的还好,以外收获。
本次的敌方大飞机的子弹发射出来后,都是沿着Y轴从上往下前进的,下一步可以思考,如果能实现散弹的效果(子弹往四面散开),这个会更具游戏性,最直接的影响就是可以逼着玩家通过上下左右键去躲子弹,而不是现在的90%时间都主要用左右键移动,上下键使用较少。
好了,该睡了,晚安。