【Visual C++】游戏编程学习笔记之二:定时器的使用

本系列文章由@二货梦想家张程所写,转载请注明出处。

本文章链接http://blog.csdn.net/terence1212/article/details/44195831

作者:ZeeCoder 微博链接:http://weibo.com/zc463717263

我的邮箱:michealfloyd@126.com欢迎大家发邮件来和我交流编程心得

you are what you read!与大家共勉!

定时器的使用

(1)定时器事件

所谓定时器事件,顾名思义,即定时触发执行某个事件。在游戏编程中,我们经常借助它来实现简易动画。

在Windows API中提供了SetTimer这个函数来建立定时器,其原型为:

UINT SetTimer(
      HWND hWnd,              // handle of window for timer messages
      UINT nIDEvent,          // timer identifier
      UINT uElapse,           // time-out value
      TIMERPROC lpTimerFunc       // address of timer procedure
);

其中,hWnd是指向CWnd的指针,即处理Timer事件的窗口类;nIDEvent是定时器代号,即身份标志,这样在OnTimer()事件中,才能根据不同的定时器,来做不同的事件响应;uElapse是时间间隔;lpTimerFunc为相应的处理函数,如果不用响应函数处理WM_TIMER消息,则此参数应设为NULL。

在建立的定时器之后,如果程序要停用该定时器,这时候Window Api提供了killTimer函数来删除定时器。其原型为

BOOL KillTimer(
    HWND hWnd,      // handle of window that installed timer
    UINT uIDEvent     // timer identifier
);

(2)定时器使用示范

本笔记中要实现人物跑动的如下动画:

【Visual C++】游戏编程学习笔记之二:定时器的使用

下面是代码部分:

1、全局变量声明

// Global Variables:
HINSTANCE hInst;// current instance
HBITMAP Walker[16] ;//声明人物跑动数组来存储各章人物位图
HDC mdc ,hdc ;//
int num;//用来记录当前显示的图号

2、 初始化函数

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
   TCHAR filename[20] ;
   memset(filename , 0 ,sizeof(TCHAR)*20);
   int i ;
   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, _T("人物跑动"), WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   MoveWindow(hWnd , 10 ,10 ,600 ,450 ,true);
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   hdc = GetDC(hWnd);
   mdc = CreateCompatibleDC(hdc);

   //载入各个人物位图
   for ( i = 0 ; i <= 15 ;i++)
   {
       _stprintf_s(filename , TEXT("%d.bmp") , i);
       Walker[i] = (HBITMAP)LoadImage(NULL , filename , IMAGE_BITMAP , 121 ,129, LR_LOADFROMFILE);
   }

   num = 0 ;
   SetTimer(hWnd , 1, 100 , NULL);

   MyPaint(hdc) ;

   return TRUE;
}

3、自定义绘图程序

void MyPaint(HDC hdc)
{
    if (num > 15)
    {
        num = 0 ;
    }
    SelectObject(mdc , Walker[num]);
    BitBlt(hdc , 200 , 150 ,600 ,450 , mdc ,0 ,0 ,SRCCOPY);

    num ++;
}

4、运行上述代码之后就能看到人物跑动的动画了。

【Visual C++】游戏编程学习笔记之二:定时器的使用

笔记二就到这里结束了。

end!

上一篇:【转】Android项目中编译 C的模块


下一篇:在vue配置sass