游戏的运行模型

  理解游戏的运行模型,对处理很多游戏错误有非常大的帮助。

  游戏是有一个主循环的。那么游戏主循环做了什么事情呢?

  

  游戏主循环一次就表示一帧,游戏主循环包括:接受输入、处理游戏逻辑、渲染、Sleep。

  帧的英文是Frame,帧率英文是Frame Per Second(简称FPS)。

  一般游戏的帧率是60FPS,也就是一秒渲染60帧。60帧的情况下,游戏会非常流畅,不会感觉到卡顿。

  60FPS的游戏中,一帧是1/60=0.0166666666666667秒,大约是17毫秒。

  电影的帧率是24帧,电影比游戏慢多了,为什么电影是24帧呢,这个是有历史原因的,早期的电影是使用胶卷制作的,帧数越多使用的胶卷越高,成本也就越高。

  如果电影中晃动镜头特别多的时候,就会感觉画面糊成一片,看得很不清晰。为什么游戏的帧率普遍要求要比电影高呢?这是因为游戏是有操作的,尤其是动作游戏,玩家每操作一次都要在画面上体现出来,如果帧率过低,就感觉到有延迟。

Sleep的作用

  主循环的最后一步的Sleep的作用是稳定帧率。在60FPS的游戏中,一帧是17毫秒:

  一、如果游戏主循环的前三个步骤(接受输入、处理游戏逻辑、渲染)的执行时间小于17毫秒,假设8毫秒就完成了前三个步骤,那么就Sleep等待9毫秒;如果不进行Sleep,游戏的速度就会加快。

  二、如果游戏主循环的前三个步骤执行时间超过了17毫秒,比如30毫秒才完成前三个步骤,最后一个步骤Sleep就不会被执行,玩家就会感觉到画面卡了一下。

如果知道游戏的帧率

  有一个选项在开发游戏的时候很重要,一定要打开并一直关注。

  

  如图所示:37.42FPS表示帧率是37.42,26.72MS表示运行一帧要26.72毫秒。

  在游戏开发过程中,应该一直关注FPS,如果发现FPS突然掉了,就能大概知道是什么地方出了问题。

  理解游戏主循环模型,就能理解很多游戏错误是怎么产生的。

最新文章

  1. arm工作模式笔记
  2. 使用iframe的优缺点,为什么少用iframe以及iframe和frame的区别。
  3. ReactiveCocoa源码拆分解析(五)
  4. UiAutomator 测试工程开发小结
  5. 关于isset使用产生Can't use function return value in write context错误
  6. C++ Vector 使用心得 [转]
  7. 【HDU3247】 Resource Archiver(DP+AC自动机+最短路)
  8. VC获取当前程序运行路径
  9. im 编辑命令总结
  10. Delphi中类的运行期TypeInfo信息结构说明
  11. ZOJ3508 The War 贪心,最大流
  12. 【BZOJ2428】均分数据(模拟退火)
  13. 自动化运维:使用flask+mysql+highcharts搭建监控平台
  14. 理解Golang哈希表Map的元素
  15. form表单提交到Servlet后,弹出对话框,然后在跳转页面
  16. Nginx的location匹配规则
  17. Python学习之旅(二十三)
  18. AngularJS实战之filter的使用二
  19. 基于Bootstrap+jQuery.validate Form表单验证实践
  20. Docker与虚拟机技术

热门文章

  1. sql表连接方式
  2. Scala下划线_使用
  3. 06机器学习实战之SVM
  4. S老师 C#编程数据结构篇 学习
  5. Visual Studio不显示智能提示代码,快捷键Alt+→也不出现
  6. vue的watcher 关于数组和对象
  7. Truthy and Falsy Values and Equality Operators
  8. java 对象的创建
  9. Java变量的初始值
  10. Android 单元测试实践