类说明:时间就是生命。这对于游戏来说,最为准确。游戏程序只做两件事:显示图片、处理逻辑。更准确的说法是:每隔一段时间显示图片并处理逻辑。程序中,要设置一个定时器。这个定时器会每隔一段时间发出一个WM_TIMER消息。在该消息的处理中,先逻辑处理。逻辑处理完毕,通过InvalidateRect函数发出WM_PAINT消息,显示各种图片。游戏就不停地运行下去,直至程序结束。
时间表示:用一个整数iNum表示当前时间,游戏中的时间是1,2,3, … , n, 1,2,3, … ,n 不停循环.假设1秒内需要25个WM_TIMER消息(每40毫秒1次),则n=25. 也可以用一个变量,统计过了几秒。
控制事件频率的方法:
一秒内发生多次
以游戏背景图片为例, 每秒移动5下, 可以在iNum为5,10,15,20,25这5个时间点上移动.即iNum可以被5整除时,修改背景图片的坐标.
一秒内发生一次
例如火圈, 每秒产生一个新的蘑菇兵. 可以随便指定一个时间点,如20. 当iNum等于20时,生成一个蘑菇兵。
多秒内发生一次
需要一个辅助变量iNumShow,统计时间过了几秒。每隔一秒iNumShow减1,当iNumShow等于0时处理逻辑。
成员函数功能列表:(所有函数都是内联函数)
class MYCLOCK
{
public:
//构造函数 初始化所有变量
MYCLOCK()
{
iNum=0;//时间点
iIsActive=0;//是否已经开始计时
iNumShow=0;//计时秒数
iElapse=100;//默认每100ms发一个WM_TIMER消息
ishow=0; //是否显示时间
}
//析构函数 销毁计时器
~MYCLOCK()
{
Destroy();
}
//功能 开始计时, 产生WM_TIEMR消息的时间间隔为elapse.
// 设置计时秒数(timetotal).
//入参 窗口句柄 时间间隔 计时秒数
void Begin(HWND hw,int elapse,int timetotal)
{
if(iIsActive)
return;//已经启动了,直接返回
hWnd=hw;
&n