全球旧事资料 分类
【VisualC】游戏开发笔记之八基础动画显示(二)游戏循环的使用
作者:孙广东邮箱:1224708372qqcom把邮箱号码发给我。我会把源代码发给你。
我的百度空间文库:httpwwwbaiducompa1224708372fromwe
ku欢迎访问,有更多专业资料。
欢迎邮件交流编程心得
由于百度文库不支持压缩文件格式,源代码不能分享,很抱歉,想要源代码的请
在笔记七中我们讲解了用定时器来产生动画的效果。定时器的使用固然简单方便,但是事实上这样的方法仅适合用在显示简易动画及小型的游戏程序中。因为一般而言,游戏本身需要显示顺畅的游戏画面,使玩家感觉不到延迟的状态。基本游戏画面必须在一秒钟之内更新至少25次以上,这一秒钟内程序还必须进行消息的处理和大量数学运算甚至音效的输出等操作。而使用定时器的消息来驱动这些操作,往往达不到所要求的标准,不然就会产生画面显示不顺畅和游戏响应时间太长的情况。这里我们提出一种游戏循环的概念,游戏循环是将原先程序中的消息循环加以修改,方法是判断其中的内容目前是否有要处理的消息,如果有则进行处理,否则按照设定的时间间隔来重绘画面。下面是接下来一段游戏循环的程序代码:
cppviewplai
copypri
t
1游戏循环23456789else1011tNowGetTickCou
t12iftNowtPre100注释点3注释点4whilemsgmessageWM_QUITifPeekMessagemsgNULL00PM_REMOVE(详细内容见下)Tra
slateMessagemsgDispatchMessagemsg注释点2注释点1(详细内容见下)
f13MyPai
thdc1415
我们来讲解一下游戏循环片段中的几个重点。1注释点1:当收到的msgmessage不是窗口结束消息WM_QUIT,则继续运行循环,其中msg是一个MSG的消息结构,其结构成员message则是一个消息类型的代号。2注释点2:使用PeekMessage()函数来检测目前是否有需要处理的消息,若检测到消息(包含WM_QUIT消息)则会返回一个非“0”值,否则返回“0”。因此在游戏循环中,若检测到消息便进行消息的处理,否则运行else叙述之后的程序代码。这里我们要注意的是,PeekMessage()函数不能用原先消息循环的条件GetMessage()取代,因为GetMessage()函数只有在取得WM_QUIT消息时才会返回
好听全球资料 返回顶部