初次接触游戏编程,于是选择了《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游戏编程大师技巧》第一章 笔记相关推荐

  1. 3D游戏编程大师技巧第一章 vs2013编译书本源码问题解决方案

    (书本是VC 6.0和vs2013不同) 一. 1.1.点击右键属性->配置属性->C/C++->附加包含目录:里面添加DirectX SDK的include文件路径:(如:D:\3 ...

  2. 游戏开发之路(一):游戏开发概述

    视频连接:游戏开发入门系列(一):游戏开发概述 这是看了视频以及一个博主的笔记,自己总结的笔记留存使用. 视频梗概(提炼了一些有用的问题) 课程的目标是什么? 开始游戏开发之路 游戏是如何开发的,开发 ...

  3. 在Linux下编程和在Windows下编程的区别

    Linux和Windows是两种操作系统,从用户群来说Linux是一个以开发者为中心的操作系统,而windows是以消费者为中心的操作系统,这也是两个操作系统作为根本的区别. 在Linux与Windo ...

  4. 高一信息技术课件python编程_教科版高中信息技术选修第一章第三节Python入门--奇妙曲线的绘制 课件(22张ppt) 教案 (2份打包)...

    ID:10986924 资源大小:11671KB 资料简介: 教学设计 [课程标准要求] 体验算法思想,了解算法和程序设计在解决问题过程中的地位及作用:能从简单的问题出发,设计解决问题的算法,并能初步 ...

  5. 第一章笔记——编程基础

    第一章 编程基础 1.1变量 1.变量的输入与输出: print函数.input函数和变量赋值"=" 2.简单变量类型: 整型和浮点型.print函数同时输出两个变量 3.数学计算 ...

  6. 《Undocumented Windows 2000 Secrets》翻译 --- 第一章(2)

    第一章  Windows 2000对调试技术的支持 翻译:Kendiv(fcczj@263.net) 更新: Friday, January 18, 2005 声明:转载请注明出处,并保证文章的完整性 ...

  7. 《3D游戏编程大师技巧》读书笔记

    转转悠悠,这个坑,还没有爬出来,之前做游戏的时候以为不需要了,现在做渲染又绕回来,从另外一个角度说明,我面对的问题本质上是一类的.目录看了几遍,决定还是用"曳光弹"打法,从当前最需 ...

  8. 游戏制作之路:游戏引擎选择、Mac下和Windows下UnrealEngine 4体验对比、文档及其他...

    2019独角兽企业重金招聘Python工程师标准>>> <h2 id="toc_0">UnrealEngine 4和Unity3d的选择</h2 ...

  9. 【编程之路】Python编程进阶

    Python编程进阶 不使用中间变量,交换两个变量a和b的值. a, b = b, a 需要注意,a, b = b, a 这种做法其实并不是元组解包,虽然很多人都这样认为.Python 字节码指令中有 ...

  10. 网络游戏server编程,第一章笔记

    1.什么是模块化?    现在的服务器程序大致分为三类,引擎模块,游戏逻辑模块以及管理模块.    引擎模块的功能主要是网络通信,加密,内存管理等:    游戏逻辑模块随着游戏的不同,内容也不同,主要 ...

最新文章

  1. Ubuntu开启远程连接
  2. 亚信科技高念书:“一巩固三发展”五年打造百亿企业
  3. java for each 原理_Java for each实现机制代码原理解析
  4. PHP判断pc和移动端跳转,JS判断是PC还是移动端浏览器,并根据不同的终端跳转到不同的网址...
  5. OpenCV(一)Mac下OpenCV的安装和配置
  6. 目前项目wordpress插件记录
  7. 无法使用SQL login去登陆SQL Server - 'Password did not match'
  8. 前端项目架构模板-(三)交互式打包及自动化部署前端项目
  9. 《通信原理》复习笔记3----第三章随机过程相关例题(重点与难点)
  10. 和秋叶一起学PPT之段落排版与字体(课时四、五)
  11. 超级简单的自动刷新_输入名字,自动生成情侣头像~
  12. 安卓基于图像识别和CNN做出一个通用的斗地主记牌器(一)
  13. 安卓短信软件_【安卓清理君】极度舒适的垃圾清理工具
  14. 使用springboot往数据库中插入汉字报错
  15. 产品经理必修课(4):深挖需求
  16. 私有云服务器搭建教程(保姆级)——台式电脑+ubuntu+docker+nextcloud+mysql+花生壳内网穿透
  17. DDL(数据库定义语言)
  18. Orace数据库将子集字符集转换为超集字符集操作方法,很详细
  19. MacBook设置中国时区时间
  20. 第1章 JVM语言家族概览 《Kotin 编程思想·实战》

热门文章

  1. 常用遥感数据下载地址
  2. 如何在官网下载java JDK
  3. 解决JDK官网下载龟速的问题
  4. esp ghost引导_UEFI引导修复教程和工具
  5. win+ubuntu系统引导修复
  6. 【正点原子MP157连载】第二章 ATK-STM32MP157烧写系统-摘自【正点原子】STM32MP157快速体验
  7. centos 下载tomcat8
  8. 计算机桌面的照度,学校建筑实验室实验桌面照度标准值?
  9. Python练习题总结摘要
  10. 1024公众号福利放送