【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)定时器使用示范
本笔记中要实现人物跑动的如下动画:
下面是代码部分:
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、运行上述代码之后就能看到人物跑动的动画了。
笔记二就到这里结束了。
end!
【Visual C++】游戏编程学习笔记之二:定时器的使用的更多相关文章
- 【Visual C++】游戏编程学习笔记之四:透明动画实现
本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44224963 作者:ZeeCod ...
- 【Visual C++】游戏编程学习笔记之八:鼠标输入消息(小demo)
本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder 微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.c ...
- 【Visual C++】游戏编程学习笔记之七:键盘输入消息
本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder 微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.c ...
- 【Visual C++】游戏编程学习笔记之六:多背景循环动画
本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44264153 作者:ZeeCod ...
- DirectX 11游戏编程学习笔记之8: 第6章Drawing in Direct3D(在Direct3D中绘制)(习题解答)
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...
- DirectX 11游戏编程学习笔记之6: 第5章The Rendering Pipeline(渲染管线)
本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com 注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...
- 【Visual C++】游戏编程学习笔记之五:单一背景滚动
本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44224963 作者:ZeeCod ...
- 【Visual C++】游戏编程学习笔记之三:游戏循环的使用
本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44208419 作者:Zee ...
- 【Visual C++】游戏编程学习笔记之九:回合制游戏demo(剑侠客VS巡游天神)
本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder 微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.com ...
随机推荐
- 【mybatis深度历险系列】mybatis的框架原理+入门程序解析
在前面的博文中,小编介绍了springmvc的相关知识点,在今天这篇博文中,小编将介绍一下mybatis的框架原理,以及mybatis的入门程序,实现用户的增删改查,她有什么优缺点以及mybatis和 ...
- solr多集合配置
1.1 多SolrCore配置 一个solr工程中可以配置多个SolrCore实例. 分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_ ...
- 23 服务IntentService Demo6
MainActivity.java package com.qf.day23_service_demo2; import android.app.Activity; import android.co ...
- RxJava(七) 使用debounce操作符 优化app搜索功能
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/51555203 本文出自:[余志强的博客] 一.抛出问题 现在几乎所有 ...
- springMVC源码分析--动态样式ThemeResolver(一)
Spring MVC中通过ThemeSource接口来提供对动态更换样式的支持,并提供了ResourceBundleThemeSource这个具体实现类来提供通过properties配置文件对them ...
- maven项目管理
systemPath方式 有些不通用的包,maven仓库没有,只能通过本地包依赖,就像下面方式: 在需要依赖的项目建lib文件夹,如下: 然后在pom.xml项目管理文件里面加入本地依赖,如下 这种情 ...
- [ExtJS5学习笔记]第二十八节 sencha ext js 5.1.0发布版本正式发布 extjs doc下载地址
本文地址:http://blog.csdn.net/sushengmiyan/article/details/41911539 本文作者:sushengmiyan ------------------ ...
- 一个maven项目打多个可执行Jar文件
使用maven-jar-plugin插件可以将一个maven项目按照需求打出多个可执行的jar文件. pom关键配置如下所示: <plugin> <groupId>org.ap ...
- Linux--Web应用服务和MySQL数据库
(1) WWW是一种交互式图形界面的Internet服务,具有强大的信息连接功能,是 人们在网上查找.浏览信息的主要手段.它使得成千上万的用户通过简单的 图形界面就可以获取各个大学.组织.公司 ...
- Android初级教程人品计算器
先看布局: main_activity.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andr ...