游戏编程基础(四)GDI游戏循环
来源:互联网 发布:淘宝卖家版下载官方 编辑:程序博客网 时间:2024/05/01 10:00
前面在制作GDI游戏动画基础的时候就谈过定时器这种消息驱动的方式并不能达到显示顺畅游戏画面的要求。因此各种编程书籍都会提及一个所谓“游戏循环”的概念。
而在windows 游戏编程中,这个概念主要是通过PeekMessage这个API来实现的。回忆此前Windows 默认的消息循环,是通过GetMessage来实现的,那么理清楚这两个APi之间的区别,就能理解Windows游戏循环的概念了。
“在Windows内部,GetMessage和PeekMessage执行相同的代码,而两者最大的不同之处体现在没有消息返回到应用程序的情况下。PeekMessage会返回一个空值到应用程序,而GetMessage会在此时让应用程序休眠。”
了解了上面这个特性,为了达到游戏画面在一秒钟之内更新至少25次以上,那么就知道应该利用PeekMessage在空闲的时候也能利用程序来进行刷新操作。
这样就可以将之前GDI游戏动画基础中用Windows定时器做动画效果的例子修改为“游戏循环”的方式,然后对比一下两种方式的效果。
关键代码:
//add by leoHBITMAPg_hBitmapMan[12];//位图数组,用于存放人物位图HDCg_mdc,g_hdc; //mdc为内存兼容DC,hdc用来存储窗口DCHWNDg_hWnd;DWORDg_dwTimePre, g_dwTimeNow, g_dwTimeCheck;//分别记录上一次绘图时间,此次绘图时间,每秒开始时间intg_nNum, g_nFrame, g_nfps; //分别记录图索引,累加画面更新次数,每秒帧数..........................................................修改windows消息循环MSG msg;ZeroMemory(&msg, sizeof(MSG));//游戏循环while (msg.message != WM_QUIT){if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){TranslateMessage(&msg);DispatchMessage(&msg);}else{g_dwTimeNow = GetTickCount();if (g_dwTimeNow - g_dwTimePre >= 100){AnimaPaint(g_hdc);}}}............................................................void AnimaPaint(HDC hdc){if (g_nNum > 12){g_nNum = 0;}//计算每秒帧数g_nFrame++;if (g_dwTimeNow - g_dwTimeCheck >= 1000){g_nfps = g_nFrame;g_nFrame = 0;g_dwTimeCheck = g_dwTimeNow;}SelectObject(g_mdc, g_hBitmapMan[g_nNum]);BitBlt(hdc, 0, 0, 640, 480, g_mdc, 0, 0, SRCCOPY);//记录此次画图时间g_dwTimePre = GetTickCount();g_nNum++;}
- 游戏编程基础(四)GDI游戏循环
- 游戏编程基础(三)GDI游戏动画基础
- 游戏编程基础(一)GDI位图透明效果
- 游戏编程基础(二)GDI透明半透明效果
- 游戏编程之四 diectxdarw基础篇
- 游戏开发基础(四)
- 游戏编程入门(3):绘制基本 GDI 图形
- 四.android中的游戏循环
- MFC设计局域网对战五子棋游戏(四)GDI+和GDI混合双缓冲绘图
- bada 2D游戏编程之四——设计游戏循环
- 《Windows游戏编程大师技巧》 四、GDI、控件和突发奇想
- C#游戏编程--GDI+与冲突检测
- GDI+ 游戏编程之1: 基本要求
- GDI+ 游戏编程之2:GDI+基本使用
- DirectDraw 游戏编程基础
- 游戏编程基础 书
- 游戏编程基础
- 《C++游戏编程》基础
- 网络知识点
- 2012第18周移动游戏推荐
- 集线器,路由器,交换机,网关设备之间的区别
- 前端图表系列之一 --Highchart
- hibernate 具有主外键关系的多表级联保存
- 游戏编程基础(四)GDI游戏循环
- Activity-Intent-Intent filters
- 一道看似简单的sql面试题(count,group by,distinct)
- C#中IComparer和IComparable接口
- typename 你会用了吗?
- 排序
- java例程练习(多线程[线程同步问题])
- 二叉树笔试题
- zendframework的安装与配置