/FightOfPlane

实现碰撞检测

Primary LanguagePython

FightOfPlane

1.此时初步创建出我方飞机,加载出背景图片和背景音乐,且能够用pygame.key.get_pressed()方法检测键盘按下的按键,控制飞机移动的方向。

2.为加强飞机的动感,采用单片机中的delay延时函数类似的方法,设置delay变量,固定时间内两张图片交替显示,使得飞机尾气看似在喷射。

3.创建敌机类,敌机共分为3种,大小、速度、承受攻击的能力不同。其中大飞机与中小型敌机不同,大型飞机与我方飞机类似,加入了飞行特效。

4.绘制敌机时没考虑绘制位置,将大型敌机绘制在小型机之前,会导致两者重合,若此时敌机逼近会使我方飞机被另一未被摧毁的飞机撞毁。 所以创建敌方飞机时,先使小型飞机飞出,再绘制中型和大型飞机。

5.碰撞检测:敌机碰撞我方飞机时,我方飞机损毁,此时播放敌我方飞机损毁画面。 使用python的mask方法获取敌机和我方飞机非透明的部分,再进行碰撞检测。

6.添加子弹,使得我方飞机具有攻击能力。与敌机和我方飞机的碰撞检测方法类似,一旦检测到子弹与敌机的非透明部分重合,敌机损毁。但是此时遇到的问题时,如何使子弹跟随飞机进行移动。

解决方法:在子弹类的reset()方法中,传入当前飞机顶部**的位置,下一次绘制子弹时,绘制在飞机的顶部。

7.中型飞机和大型飞机此时遇到一发子弹被损毁,为其增加各自的energy属性,地方中型飞机中8颗子弹后损毁,大型飞机中20颗子弹损毁。

8.为提升游戏体验,用pygame里的绘图方法为中、大型飞机绘制血条,能够使玩家对敌方战机的血量有更为清晰的判断。 且当生命值大于20%,血条现实绿色,否则显示红色。

9.毁灭对方不同类型的敌机等分不同,小型机1000分,中型机6000分,大型机10000分,加载新的字体,并且用render方法将其渲染为我们想要的surface对象。

10.建立supply文件,创建bomb炸弹类,我方飞机出场带有3颗炸弹,可将当前屏幕的所有地方飞机摧毁。

11.绘制游戏结束画面,当敌机与我方飞机碰撞,结束当前游戏,并且将当前的分数显示在屏幕上。

12.绘制“重新开始”和“结束游戏”界面,需要用pygame.mouse.get_pressed()方法获取鼠标的点击位置,如果鼠标点击重新开始则从新调用main()函数,否则推出游戏。