本章开始,我们做一个稍复杂一点的游戏。并以此为样例,学习一个游戏开发相关技术。
这个游戏的系列笔记,可能会花不小的篇幅,尽可能涉及游戏开发的多个方面,欢迎大家收藏慢慢看。
先设想一下我们要做的游戏:
1、有两个玩家,分别操作自己的飞机。
2、飞机可以发射子弹。
3、随机出现敌方飞机且缓慢向下移动,最终移出屏幕。
4、敌机也可以发射子弹。
5、子弹命中时扣血量。血量为0时消失。
6、玩家可以拾取各种道具。
7、有移动的星空背景。
不是很复杂,作为初学足够了。
游戏中物体移动和屏幕刷新,通常有两种模式:
1、物体移动时,立即刷新屏幕。将物体从原有位置擦除,重绘该位置的背景,在新的位置绘制物体。此种方法对如何重绘原背景有很高的要求,毕竟不光是背景,那个地方可能还有其他的物体。
2、物体移动时,并不立即刷新屏幕,而是定时绘制所有物体到缓冲区,然会再从缓冲区刷新到屏幕。此种方法必须开辟显示缓冲区,对内存有要求。同时,显示所有物体对性能也有一定要求。关键看静态的物体多不多,如果有很多静态物体,可以开辟多个缓冲区。
本游戏中,我们采用方式二。因为所有物体都在动,每帧都要绘制所有物体。且屏幕只有64*32,缓冲区消耗很小。
我们知道,游戏中要让物体出现在指定的位置很容易,但是加上时间维度,让其在任何时间都出现在他应该出现的位置,特别是很多物体一起运动的时候,就需要点东西加持了。这其中可能会涉及很多需要同步的地方。比如说时间同步,空间同步,状态同步,帧同步等等。举个例子:
物体A每秒应该移动10个像素点,那么:
1、屏幕刷新时间是不确定的,我们不应该强制要求屏幕每秒刷新多少次。
2、执行物体移动的操作——即修改XY值的方法——不应该强制要求执行的时刻,也就是说,你不知道每秒钟XY值修改了多少次。
既然我们有很多的物体都在移动,那么相同速度的物体,应该