游戏编程之路 -- 《Windows游戏编程大师技巧》第一章 笔记
来源:互联网 发布:华为数据网络怎么设置 编辑:程序博客网 时间:2024/04/30 06:31
初次接触游戏编程,于是选择了《Windows游戏编程大师技巧》这本书,决定现在开始,坚持下去。
在第一章的freakout程序中,主程序winmain的循环使用了PeekMessage而不是GetMessage。于是就开始去找这两者的区别。
通过在网上找文章和看msdn,并结合编程大师里面的段落意思,让我比较深刻的理解了在freekout程序里面使用PeekMessage的用意。
在编程大师里面有一段话:
Basically, Windows needs to have what's called an event loop. This is standard for all Windows programs since Windows is, for the most part, event-driven. However, games aren't event-driven; they run at all times, whether the user does something or not. So we need to at least support a minimum event loop to make Windows happy.
翻译过来的大致意思是,标准的windows程序是事件驱动的,所以windows必须要有一个消息循环,但游戏程序却不是事件驱动的,无论用户是否有动作,游戏程序都是一直在运行。但无论如何,我们还是要有一个消息循环,因为你编写的游戏程序也是windows程序。
起初我看的时候有些不明白,奇了个怪,说来说去,那还不都是消息驱动?但在网上比较了一下PeekMessage和GetMessage,就知道了作者说以上一段话的原因。
首先,GetMessage和PeekMessage都可以从消息队列中获得消息,所以,在你的主循环中,你可以根据你的目的去选择其中的一个。然而GetMessage的行为是只有在消息队列中有消息是才会返回,而PeekMessage是无论消息队列中是否有消息,都会返回,有则返回非0,无则返回0。FreakOut程序中使用的是PeekMessage,原因就是,这个是游戏程序," they run at all times",所以你不能用GetMessage来等待用户的输入,你要保证游戏程序的逻辑和帧的刷新始终是在运行的。这就是使用PeekMessage的原因。
当然PeekMessage还有其他的特性,比如可以通过设置参数来去决定是否移除消息队列中的消息等,但FreakOut里面用PeekMessage的原因已经明了。
- 游戏编程之路 -- 《Windows游戏编程大师技巧》第一章 笔记
- Windows游戏编程大师技巧(第二版)笔记-第一章
- Windows游戏编程大师技巧第二版学习笔记之第一章
- Windows游戏编程大师技巧第二版学习笔记之第一章 实验补充
- 游戏编程之路 -- 《Windows游戏编程大师技巧》第2,3,4章 笔记
- windows游戏编程大师技巧
- 《WINDOWS游戏编程大师技巧》学习笔记1
- 《Windows游戏编程大师技巧》笔记 2017.1.9
- 《Windows游戏编程大师技巧》笔记 2017.1.12
- Windows游戏编程大师技巧之三角形填充
- Windows游戏编程大师技巧之三角形填充
- windows游戏编程大师技巧--读书笔记1
- windows游戏编程大师技巧--读书笔记2
- windows游戏编程大师技巧1
- windows游戏编程大师技巧光盘
- 《Windows游戏编程大师技巧》一、学海无涯
- 攻读 《windows游戏编程大师技巧》 1
- windows游戏编程技巧大师第二章
- Jetty 源码分析
- 纹理化海量地形
- oracle常用SQL
- .net ToString()格式统计
- 面向对象程序设计六大原则总结
- 游戏编程之路 -- 《Windows游戏编程大师技巧》第一章 笔记
- Java中的字符串与字节流转换
- 应用反射添加新控件的层叠显示
- 修改oracle SGA,以提高oracle性能
- winform中的树
- java的一些东西你懂的。
- 关于lib和dll
- 使用ArcSDE10软件创建ArcSDE9 Schema的服务是否可行
- C#委托特性。