注册 登录
编程论坛 VC++/MFC

请问用MFC制作游戏位图刷帧应该如何做啊?

edward38ljh 发布于 2012-12-26 21:17, 1278 次点击
本人刚刚学了位图输出,想自己试试做一个游戏看看。当我在ONPAINT里写了第一夜位图后,发现我已经不知道下一页位图应该怎么写了。而且又不知道应该如何去控制刷帧。想让游戏动起来,又不知怎么做。
我在VC6里单步运行,看见进入AFXAPI AfxWinMain函数里,然后到了if (!pThread->InitInstance())就显示画面了。我在百度里找到了一个settimer的函数,看起来有类似刷帧的效果。但有不知道应该怎么使用才可以刷帧。结果一直停留在第一页位图里。
请问应该如何才可以做到位图刷帧,播放动画的效果啊?
还有如果以后要用按键来控制移动应该在哪里判断呢?
7 回复
#2
yuccn2012-12-27 08:35
位图刷帧?你是说一个gif格式的多帧图片?还是说多个图片的转换?

如果是gif格式的图片,好像有人提供过一个控件(重绘控件)来实现过,网上找找看咯。搜索 gif 相关的vc源代码估计能出来了
如果是多个图片轮着转换的,可以启动一个计时器,在计时器事件中 根据索引绘制不同的图片就可以达到图片动起来的效果了
#3
mmmmmmmmmmmm2012-12-27 12:51
学习一下
#4
edward38ljh2012-12-27 15:55
回复 2楼 yuccn
不是GIF图片,是整个画面的更新~应该怎么做啊?因为玩游戏的时候画面不是动的吗?要怎么才可以让画面都起来?
#5
yuccn2012-12-27 20:42
比如准备十张图片,
用一个计时器定时去绘制,开始的时候索引为index = 0,在计时器事件中 绘制第index张图片,index ++,index = 10 的时候 index = 0.
#6
edward38ljh2012-12-27 23:27
回复 5楼 yuccn
请问定时器应该写在哪里啊?还有应该怎么用啊?后面的回调函数是写的呢?这几天我见那些游戏制作入门的书里的WinMain都与MFC里面的不同,请问是自己写的吗?WinMain可以重载的吗?
#7
yuccn2012-12-28 00:17
只要又窗口就可以设置计时器了
::SetTimer()
KillTimer()

你查下这两个api用法
#8
黛玉他哥2012-12-30 21:56
WinMain ()是SDK编程模式下的,MFC对SDK进行了封装,所以表现形式有所不同,可以设置一个定时器,
UINT_PTR SetTimer(
  HWND hWnd,              // handle to window
  UINT_PTR nIDEvent,      // timer identifier
  UINT uElapse,           // time-out value
  TIMERPROC lpTimerFunc   // timer procedure
);
这是SDK下的定时器函数,响应的在窗口处理函数中响应WM_TIMER消息。其中处理刷新等事务,MFC下SetTimer为CWnd类的成员函数,直接调用便可,SetTimer(1,1000,NULL);
此意思是设置一个定时器,定时间隔为1秒,NULL为交给默认定时器处理函数处理。再在MFC中添加 WM_TIMER消息。
1