设计动画和游戏常用的函数,如清屏、演示、获取用户键盘输入、获得标准输出设备句柄、定位光标位置等。
在学习设计游戏之前,首先应该了解光栅扫描显示器的显示原理。光栅扫描显示器是一种基于电视技术的显示器(CRT)。在光栅扫描显示器中,电子束按照固定的扫描顺序,从上到下,从左至右,依次扫描整个屏幕,只有这个屏幕被扫描完毕才能显示一幅完整的图形,称为一帧(Frame)
以CRT为例,电子束“轰击”屏幕上的荧光粉,使其发光而产生图形。荧光粉的发光持续时间很有限,因此图形在屏幕上的存留时间很短。为了保持一个稳定持续的图形画面,就需要控制电子书反复地重绘屏幕图形,这个过程称为刷新。每秒重绘屏幕图形的次数,称为刷新频率。刷新频率至少在60帧/秒以上,才不会发生闪烁现象。
屏幕上的每个点,称为一个像素(Pixel),它是构成图形的基本元素。需要存储的图形信息由屏幕上的所有像素点的灰度值构成一个像素矩阵。这些信息被存储在刷新缓冲寄存器(俗称显存)中。 对于图形显示方式,用水平和垂直方向能显示的像素数的乘积表示屏幕的显示分辨率,而对于文本显示方式,则用水平和垂直方向能显示的字符数的乘积表示屏幕的显示分辨率。
计算机是如何产生动画的呢?
动画其实就是动态地产生一系列静止、独立而又存在一定内在联系的画面,然后将其按一定的播放速度显示出来,其中当前帧画面是对前一帧画面的局部修改。为什么一系列静止的画面会产生运动的视觉效果呢?这主要是利用了人眼的视觉暂留现象。视觉暂留现象就是指光对视网膜所产生的视觉在光停止作用后仍然会保留一段时间,即在物体快速运动时,当人眼所看到的影响消失后,人眼仍能继续保留其影响0.1~0.4s之间的图像。这样,在下一帧出现时就会产生物体连续运动的效果。电影和电视的拍摄都利用了这一原理。根据这一原理,可以设计动画的一般化实现步骤如下:
while(1)
{
清屏
显示图形
延时
更新图像
}
延时的目的是为了降低屏幕图形闪烁现象,确保在输出图形后等待即让图形在屏幕上停留几毫米的时间。为了实现延时操作,需要使用Sleep()函数,该函数的功能是将进程挂起一段时间。例如Sleep(200)表示延时200ms,在Windows系统中使用这个函数需要包含windows.h。标准C中的这个函数的首字母是小写的,但是在Code::Blocks 和VS下是大写的。
为了实现清屏操作,需要使用system()函数,该函数的功能是发出一个DOS命令。例如,system(“cls”)就是向DOS发送清屏指令。必须在文件中包含stdlib.h才能使用该函数。