游戏编程之路 -- 《Windows游戏编程大师技巧》第一章 笔记
初次接触游戏编程,于是选择了《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游戏编程大师技巧》第一章 笔记相关推荐
- 3D游戏编程大师技巧第一章 vs2013编译书本源码问题解决方案
(书本是VC 6.0和vs2013不同) 一. 1.1.点击右键属性->配置属性->C/C++->附加包含目录:里面添加DirectX SDK的include文件路径:(如:D:\3 ...
- 游戏开发之路(一):游戏开发概述
视频连接:游戏开发入门系列(一):游戏开发概述 这是看了视频以及一个博主的笔记,自己总结的笔记留存使用. 视频梗概(提炼了一些有用的问题) 课程的目标是什么? 开始游戏开发之路 游戏是如何开发的,开发 ...
- 在Linux下编程和在Windows下编程的区别
Linux和Windows是两种操作系统,从用户群来说Linux是一个以开发者为中心的操作系统,而windows是以消费者为中心的操作系统,这也是两个操作系统作为根本的区别. 在Linux与Windo ...
- 高一信息技术课件python编程_教科版高中信息技术选修第一章第三节Python入门--奇妙曲线的绘制 课件(22张ppt) 教案 (2份打包)...
ID:10986924 资源大小:11671KB 资料简介: 教学设计 [课程标准要求] 体验算法思想,了解算法和程序设计在解决问题过程中的地位及作用:能从简单的问题出发,设计解决问题的算法,并能初步 ...
- 第一章笔记——编程基础
第一章 编程基础 1.1变量 1.变量的输入与输出: print函数.input函数和变量赋值"=" 2.简单变量类型: 整型和浮点型.print函数同时输出两个变量 3.数学计算 ...
- 《Undocumented Windows 2000 Secrets》翻译 --- 第一章(2)
第一章 Windows 2000对调试技术的支持 翻译:Kendiv(fcczj@263.net) 更新: Friday, January 18, 2005 声明:转载请注明出处,并保证文章的完整性 ...
- 《3D游戏编程大师技巧》读书笔记
转转悠悠,这个坑,还没有爬出来,之前做游戏的时候以为不需要了,现在做渲染又绕回来,从另外一个角度说明,我面对的问题本质上是一类的.目录看了几遍,决定还是用"曳光弹"打法,从当前最需 ...
- 游戏制作之路:游戏引擎选择、Mac下和Windows下UnrealEngine 4体验对比、文档及其他...
2019独角兽企业重金招聘Python工程师标准>>> <h2 id="toc_0">UnrealEngine 4和Unity3d的选择</h2 ...
- 【编程之路】Python编程进阶
Python编程进阶 不使用中间变量,交换两个变量a和b的值. a, b = b, a 需要注意,a, b = b, a 这种做法其实并不是元组解包,虽然很多人都这样认为.Python 字节码指令中有 ...
- 网络游戏server编程,第一章笔记
1.什么是模块化? 现在的服务器程序大致分为三类,引擎模块,游戏逻辑模块以及管理模块. 引擎模块的功能主要是网络通信,加密,内存管理等: 游戏逻辑模块随着游戏的不同,内容也不同,主要 ...
最新文章
- Ubuntu开启远程连接
- 亚信科技高念书:“一巩固三发展”五年打造百亿企业
- java for each 原理_Java for each实现机制代码原理解析
- PHP判断pc和移动端跳转,JS判断是PC还是移动端浏览器,并根据不同的终端跳转到不同的网址...
- OpenCV(一)Mac下OpenCV的安装和配置
- 目前项目wordpress插件记录
- 无法使用SQL login去登陆SQL Server - 'Password did not match'
- 前端项目架构模板-(三)交互式打包及自动化部署前端项目
- 《通信原理》复习笔记3----第三章随机过程相关例题(重点与难点)
- 和秋叶一起学PPT之段落排版与字体(课时四、五)
- 超级简单的自动刷新_输入名字,自动生成情侣头像~
- 安卓基于图像识别和CNN做出一个通用的斗地主记牌器(一)
- 安卓短信软件_【安卓清理君】极度舒适的垃圾清理工具
- 使用springboot往数据库中插入汉字报错
- 产品经理必修课(4):深挖需求
- 私有云服务器搭建教程(保姆级)——台式电脑+ubuntu+docker+nextcloud+mysql+花生壳内网穿透
- DDL(数据库定义语言)
- Orace数据库将子集字符集转换为超集字符集操作方法,很详细
- MacBook设置中国时区时间
- 第1章 JVM语言家族概览 《Kotin 编程思想·实战》