闲来无事用VC++写一个小游戏,消灭星星【连载七】
大家每次都可以在页面中下载本节内容的实现代码,一步一步从简单开始,逐步完成游戏的各种功能,如果大家有任何问题也欢迎留言交流。
1、本节要达到的效果:上一节,我们介绍了游戏层的概念,极大增加了游戏控制的便利性。本节课我们将通过定时器来实现一些简单的动画效果。实现的动画效果为:当点击开始游戏按键后,开始游戏按键会闪烁几秒后进入游戏页面,我们今天要实现的就是这个按键闪烁动画。
2、添加动画定时器
为什么要添加定时器呢?我们前边讲过让图片跟随鼠标移动产生类似动画的效果,但是这时图片的移动依赖于用户鼠标的移动,鼠标动图片动,鼠标不动图片不动。
而我们现在需要一个随时间变化自动进行动画显示的方式,而不仅仅是随鼠标操作来显示的动画方式。Windows系统提供了一个WM_TIMER消息处理机制。在编程时,我们会经常使用定时器去实现一些自动运行的功能。使用定时器的方法比较简单,只需要通过SetTimer即可,函数告诉Windows你需要自动运行操作的时间间隔,然后Windows就会以此时间间隔周期性发送WM_TIMER消息。我们只需要在系统消息处理函数WndProc的WM_TIMER消息中操作动画显示效果就行了。
3、添加定时器
第一步:初始化定时器
在程序创建时设置定时器,我们使用SetTimer函数添加定时器,SetTimer函数只用在程序中添加一次。SetTimer函数的第2各参数0表示定时器的编号(一个程序可以有多个定时器,可以用定时器编号进行区分),第3个参数表示时间间隔,单位以毫秒计算,这里我们采用的时间间隔为30毫秒,就是说系统将每隔30毫秒发送一次WM_TIMER消息,理论上每秒执行33次。
case WM_CREATE:
......
//添加定时器
SetTimer(hWnd,0,30,NULL);
......
第二步:在系统消息处理函数WndProc中添加WM_TIMER处理
我们现在就可以在系统消息处理函数WndProc中添加WM_TIMER处理,同时添加上管理层Layer层的OnTimer消息处理,以后我们就可以直接在各个类实例中运行各自OnTimer消息处理函数了。我们在这里加上页面刷新消息,这样页面就能不间断的进行刷新,实时显示所有动画效果了。
case WM_TIMER:
//层中所有实例的鼠标移动消息
Layers.OnTimer(hWnd,message,wParam,lParam);
//当鼠标移动式刷新窗口内容
InvalidateRect(hWnd,NULL,false);
return 0;
添加以上代码后,我们后期就可以直接在各个类实例中运行各自OnTimer消息处理函数了。后期如果添加了多个定时器,还可以从OnTimer函数参数中获取定时器的编号,以便来区分是要处理哪个定时器的操作。
4、添加按键动画
按键的动画效果我们这里采用不断切换显示按键高亮图片和非高亮图片的方式呈现。我们需要用一个计数器来控制,需要给游戏开始按键(StartGameButton)添加一个整型变量。
class StartGameButton:public Button
{