在笔记七中我们讲解了用定时器来产生动画的效果。定时器的使用固然简单方便,但是事实上这样的方法仅适合用在显示简易动画及小型的游戏程序中。因为一般而言,游戏本身需要显示顺畅的游戏画面,使玩家感觉不到延迟的状态。基本游戏画面必须在一秒钟之内更新至少25次以上,这一秒钟内程序还必须进行消息的处理和大量数学运算甚至音效的输出等操作。而使用定时器的消息来驱动这些操作,往往达不到所要求的标准,不然就会产生画面显示不顺畅和游戏响应时间太长的情况。
这里我们提出一种游戏循环的概念,游戏循环是将原先程序中的消息循环加以修改,方法是判断其中的内容目前是否有要处理的消息,如果有则进行处理,否则按照设定的时间间隔来重绘画面。下面是接下来一段游戏循环的程序代码:
我们来讲解一下游戏循环片段中的几个重点。
<1>注释点1:当收到的msg.message不是窗口结束消息WM_QUIT,则继续运行循环,其中msg是一个MSG的消息结构,其结构成员message则是一个消息类型的代号。
<2>注释点2:使用PeekMessage()函数来检测目前是否有需要处理的消息,若检测到消息(包含WM_QUIT消息)则会返回一个非“0”值,否则返回“0”。因此在游戏循环中,若检测到消息便进行消息的处理,否则运行else叙述之后的程序代码。这里我们要注意的是,PeekMessage()函数不能用原先消息循环的条件GetMessage()取代,因为GetMessage()函数只有在取得WM_QUIT消息时才会返回"0",其他时候则是返回非“0”值或“-1”(发生错误时)
<3>注释点3:GetTickCount()函数会取得系统开始运行到目前所经过的时间,单位是毫秒(milliseconds)。 之前我理解错了,在这里感谢worldy的指出我的错误。
DWORDGetTickCount()//取得系统开始到目前经过的时间
这里取得时间的目的主要是可以搭配接下来的判断式,用来调整游戏运行的速度,使得游戏不会因为运行计算机速度的不同而跑得太快或者太慢。
<4>注释点4:if条件式中,"tPre"记录前次绘图的时间,而“tNow-tRre”则是计算上次绘图到这次循环运行之间相差多少时间。这里设置为若相差40个单位时间以上则再次进行绘图的操作,通过这个数值的控制可以调整游戏运行的速度。这里设定40个单位时间(微秒)的原因是,因为每隔40个单位进行一次绘图的操作,那么1秒钟大约重绘窗口1000/40=25次刚好可以达到期望值。
由于循环的运行速度远比定时器发出时间信号来得快,因此使用游戏循环可以更精准地控制程序运行速度并提高每秒钟画面重绘的次数。
了解了游戏循环使用的基本概念之后,接下来的范例将以游戏循环的方法进行窗口的连续贴图,更精确地制作游戏动画效果。
程序的运行结果如下图:
当然想要得到上述动画,我们需要把几幅位图文件放到工程文件夹下。
这个范例中我们设定的画面更新时间间隔为0.1秒,所以每秒钟最多会更新10次画面。不过如果在运行这个例子的时候同时也运行其他的程序,那么CPU必须马上出去处理所开启的其他程序,因此可能会使得每秒画面的更新次数稍稍下降。
笔记八到这里就结束了。
本节源代码请点击这里下载:【Visual C++】Code_Note_8
请大家继续关注【Visual C++】游戏开发笔记系列。
非常希望能与大家一起交流,共同学习和进步。
最后,谢谢大家的支持~~~
Theend
分享到:
相关推荐
《Visual C++游戏开发经典案例详解》是一本深入探讨C++在游戏开发领域的实践书籍,其源码提供了丰富的学习资源。C++作为一种强大的面向对象编程语言,被广泛应用于游戏开发,尤其是在高性能、低延迟的游戏系统中。这...
《Visual C++编程技巧典型案例解析——基础与应用篇(下)》是一本深入探讨Visual C++编程技术的专著,其主要目标是帮助开发者提升在实际项目中的编程技能和问题解决能力。书中涵盖了大量的实例源代码,使得学习者...
《Visual C++游戏开发经典案例详解》这本书是针对使用Visual C++进行游戏开发的专业指南,旨在帮助读者通过实例学习和掌握C++编程语言在游戏开发中的应用。书中的内容覆盖了从基础到高级的游戏开发技术,包括图形...
"游戏开发笔记:Visual C++ 中的排序算法" 在游戏开发中,正确地排序物体的贴图顺序是非常重要的。今天,我们将讨论如何使用 Visual C++ 实现排序算法来解决这个问题。 在游戏开发中,我们经常需要处理大量的物体...
《Visual C++ 2005数据库开发经典案例——会员消费管理系统》是一个深入探讨使用Microsoft Visual C++ 2005进行数据库应用开发的实践项目。在这个系统中,开发者利用了Visual C++ 2005强大的编程环境和丰富的库支持...
《Visual C++ 2005数据库开发经典案例——餐饮消费管理系统》 本文将深入探讨使用Visual C++ 2005进行数据库开发的关键技术和在实际应用中的具体实践,以餐饮消费管理系统为例,帮助读者掌握如何利用这一强大的编程...
Visual C++开发技术大全——软件工程师典藏 明日科技 源代码 解压后410M 本书是一本Visual C++ 6.0综合开发参考手册,书中几乎囊括了使用Visual C++进行程序开发的全部知识,同时在讲解中结合了大量实用而又有代表...
《Visual C++ 游戏开发案例实战》是一本专注于利用Microsoft的Visual C++环境进行游戏开发的实践教程。这本书由王浩编著,由清华大学出版社出版,提供了高清且带有书签的阅读体验,方便读者查阅和学习。在本书中,...
在本资源中,"Visual C++游戏开发案例(赋源码)"是一个针对初学者的教程,旨在帮助读者掌握使用C++进行游戏开发的基础技能。这个教程特别适合那些对编程和游戏开发感兴趣,但经验不足的人群。通过学习,你可以了解...
连连看+扫雷+俄罗斯方块+五子棋+黑白棋等源码程序
【Visual C++】游戏开发笔记之四——游戏画面绘图(一)基本图形绘制-附件资源
Visual+C++游戏编程基础源码Visual+C++游戏编程基础源码Visual+C++游戏编程基础源码Visual+C++游戏编程基础源码Visual+C++游戏编程基础源码Visual+C++游戏编程基础源码Visual+C++游戏编程基础源码Visual+C++游戏编程...
《Visual C++ 2005数据库开发经典案例——学校教务管理系统》是针对使用Microsoft Visual C++ 2005进行数据库应用开发的一个实例教程。这个系统专注于学校日常教务管理工作,涵盖了诸如学生信息管理、课程安排、成绩...
《Visual C++游戏开发经典案例详解》分为16章,其中第1~6章是讲解游戏项目开发应该具有的准备知识,主要介绍各种游戏类型及常用技术、Visual C++集成开发环境的使用、C++编程语言基础、多媒体处理及项目管理基础...
《Visual C++项目开发指南——定制自己的Photoshop》 PDG格式电子书完整版 本书以实现“我的Photoshop”项目的开发过程贯穿始终,通过大量实例,深入浅出地介绍了许多Visual C++ 6.0的编程技术及项目管理方法。所讲...
Visual C++编程技巧典型案例解析 ——图形图像处理与数据库篇
这本书的核心目标是帮助读者深入理解和掌握使用Visual C++进行.NET应用程序开发的技术和实践。 1. **Visual C++与.NET框架**:Visual C++是微软公司开发的一款强大的编程工具,支持C++语言并集成了.NET框架。.NET...
总而言之,《Visual C++ 游戏编程基础》是一本全面的教程,覆盖了从C++基础知识到使用Visual C++进行游戏开发的各个方面。通过阅读和实践书中的例子,读者可以逐步建立起自己的游戏开发技能,为进一步深入学习和制作...
《Visual C++游戏开发技术与实例》是一本深入探讨使用Microsoft Visual C++进行游戏开发的专业教程。本书结合实例,详细讲解了如何利用Visual C++的强大功能来构建游戏应用程序。Visual C++作为一款强大的编程环境,...
本文将深入探讨如何使用Visual C++进行游戏编程,特别是在实现多背景循环动画方面的技巧和注意事项。 首先,我们要理解多背景的概念。在游戏场景中,背景通常用于营造环境,可能是静态的,也可能是动态的。多背景则...