置顶:github传送门
//感觉有点长,加个分页会不会看起来舒服一点

效果图

sfml_th201sfml_th202sfml_th203sfml_th204sfml_th205sfml_th206

//To-Do List自带传送门

To-Do List

编号 任务(功能) Value Effort 是否已完成
1 完成SFML配置,显示“SFML works” 0 1 Done
2 显示一架静止的飞机于屏幕底部 5 1 Done
2+ 显示僚机 5
2+ 设置背景边框 4 4 Done
2+ 设置背景动画 4 4 Done
3 背景音乐 1 1 Done
4 左右键,控制移动飞机 10 3 Done
4+ 移动的动画展示 5 2 Done
4+ 判定点·低速移动 2 2 Done
4+ 判定点动画特效 2 1 Done
5 限制左右边界 1 1 Done
6 开炮,显示运动的炮弹 5 7 Done
6+ 子弹·击中音效 2 2 Done
6+ 僚机发射子弹,并附带跟踪效果 10
7 炮弹飞出边界处理 2 1 Done
8 随机产生敌机,并向下运动 10
8 根据时间轴产生敌机,并遵照轨迹方程移动 20 20 Done
8+ 敌机的移动动画 5 3 Done
9 敌机飞出边界处理 2 1 Done
10 碰撞处理(敌机与炮弹碰撞) 10 15 Done
11 显示敌机爆炸过程 10 2 Done
12 爆炸声音 2 1 Done
13 计分及显示 5 1 Done
14 敌机炮弹处理 10 1 Done
14+ 首领符卡设计·实现 100 100 Done
14+ 敌机炮弹音效 3 1 Done
15 被敌机击中处理(炸毁、3条命) 10 2 Done
15+ 死亡音效和动画 10 1 Done
16 过关控制(过关需要计分、游戏速度控制) 20 1 Done
Total

//以下所有代码均未封装

1.配置

隔壁文章传送门:SFML 2.4.2配置(VS2017 + Visual C++ 14)

2.显示静止飞机

Tips:实际代码中采用了动画效果,会根据当前帧数来选定Sprite。

3.BGM

Tips:music不会预先把文件读进缓冲区,所以适合大文件(1分钟以上?)的播放,在小音效的处理上应该使用预先把文件读进缓冲区的sound,可以极大的节省CPU的开销(实测大概是20倍的差距)。

4.左右键控制

Tips:这里在实际的代码中其实采取了一个监听和处理分开的策略,感觉这样结构更清晰一下,效率也更高(大概)。

5.限制区域

Tips:STL里的list下的remove_if因为其内部实现的原因,是不支持函数重载的,所以后来写了一个针对FO类的越界判定函数。之后最好能把两个函数整合一下,都针对FO对象来判定会更灵活一些。



6&7&9.发射子弹&越界回收

Tips:本来是给自机配备了两种火力模式以供选择的,后来觉得火力太薄了所以干脆一起搭载上了,大概对于敌机来说是很不友好的设定吧(笑)。


8.1&16.时间轴管理

Tips:如果Clock达到了触发条件,就把某个事件开关置1,新世界的大门就打开了(明明只是奇奇怪怪的弹幕游戏来着)。

8.2.时间轴事件

Tips:记得return 1;的时候顺便把门关上,不然可就糟了。

10.1.碰撞检测

10.2.碰撞处理

Tips:自机用的碰撞处理也是差不多的,稍微改改就能用。


11&12.敌机爆炸过程

13.计分和显示

14.敌机炮弹处理

举了一个随机弹(尖弹)作为例子

15.自机判定