目录

一、意图

二、动机

三、游戏循环

四、实例代码

1.能跑多快跑多快

2.休息一下

3.可以走一小步,也可以走一大步

4.固定时间刷新

五、目前的游戏循环

六、用电量相关

七、总结

1.固定时间步长,没有同步

2.固定时间步长,有同步

3.动态时间步长


一、意图

将游戏的进行和玩家的输入解耦,和处理器速度解耦。

二、动机

一个真实游戏循环的第一个关键部分:它处理用户输入,但是不等待它。循环总是继续旋转。

使用实际时间来测算游戏循环运行的速度,就得到了帧率FPS。

一个简单的while循环是能转多快转多快。两个因素决定它的帧率:

1.每帧需要做的工作。(复杂的物理,众多需要渲染的对象......)

2.底层平台的速度。更快的芯片可以在同样的时间里执行更多的代码。多核,GPU组,独立声卡,以及系统的调度都影响了每帧能做多少东西。

早期的视频游戏,第二个因素是固定的。如果在快些或者慢些的计算机上运行,就会造成游戏加速或者减速。新的计算机运行太快,所以无法运行旧的游戏。

三、游戏循环

一个游戏循环在游玩中不断运行。每一次循环,它无阻塞的处理玩家的输入,更新游戏状态,渲染游戏。他跟踪时间的消耗并控制游戏的速度。

很多时候游戏引擎帮助我们做了这些事,比如Unity的生命周期函数等等。

四、实例代码

1.能跑多快跑多快

2.休息一下

如果要游戏以60FPS运行,那就是每帧大约16毫秒。就必须限定这帧在16毫秒 内处理完所有事,并等待一下到16毫秒即可。

3.可以走一小步,也可以走一大步

基于上一帧到目前的真实时间流逝来刷新。

好处:

1.游戏在不同的硬件上以固定的速度运行。

2.使用高端机器的玩家获得更流畅的游戏体验。

缺点:

游戏不稳定。比如:在双人联机游戏中,一个子弹的同时飞行,好的机器刷新更快,再加上浮点数的舍入误差,刷新得多的会误差更大,最终两个机器的表现是不一样的。

4.固定时间刷新

以固定时间刷新游戏,让所有事情变得简单,物理和AI更加稳定。

自上一次游戏循环过去了一定量的真实时间。需要为游戏的“当前时间”模拟推进相同长度的时间,以追上玩家的时间。

但是固定步长的渲染可能会在两次更新之间渲染 ,就会造成一些移动上的卡顿。比如:一个子弹飞过屏幕,第一次更新还在左边,第二次更新就在右边。但玩家需要看到子弹在屏幕中间,所以就造成了卡顿。

这里的修正是,当渲染时间比更新时间大时,跳出循环,渲染上一帧到更新时间的内容。

五、目前的游戏循环

六、用电量相关

七、总结

1.固定时间步长,没有同步

1.简单

2.游戏速度直接受到硬件和游戏复杂度影响

2.固定时间步长,有同步

1.也很简单(比上一种多一行代码)

2.电量友好。简单的休眠几毫秒而不是试图每帧塞入更多处理,就可节约电量。

3.游戏不会运行太快

4.游戏可能循环得太慢。这个方法没有分离更新和渲染。没法丢掉渲染帧来追上真实时间,游戏本身会变慢。

3.动态时间步长

1.能适应并调整,避免运行得太快或者太慢。

只要能实时更新,游戏状态就不会落后于真实时间。如果玩家用高端的机器,它会回以更平滑的游戏体验。

2.复杂。

需要将更新的时间调整得尽可能小来适应高端机,同时不至于在低端机上太慢。

链接:

Fix Your Timestep! | Gaffer On Games

游戏设计模式阅读笔记8——序列模式(游戏循环)相关推荐

  1. 游戏设计模式阅读笔记19——优化模式(空间分区)

    目录 一.意图 二.动机 三.空间分区 1.适用场景: 2.实例代码 四.注意 1.划分是层次的还是平面的? 2.划分依赖于对象数量吗? 空间分区 · Optimization Patterns · ...

  2. 游戏设计模式阅读笔记4——重访设计模式(原型模式)

    目录 1.<圣铠传说>例子 2.原型语言范式 现在有很多原型的术语,这里讨论的是传统的原型设计模式. 1.<圣铠传说>例子 但这种会产生众多的类,众多的引用,众多冗余,众多的副 ...

  3. 游戏设计模式阅读笔记18——优化模式(对象池模式)

    目录 一.意图 二.动机 三.对象池模式 四.实例代码 五.注意 1.对象和池耦合的问题 一.意图 放弃单独地分配和释放对象,从固定的池中重用对象,以提高性能和内存使用率. 二.动机 比如粒子系统的调 ...

  4. 游戏设计模式阅读笔记13——解耦模式(组件模式)

    一.意图 允许单一实体跨越多个领域而不会导致这些领域彼此耦合. 二.动机 当一个系统涉及到渲染,物理,声音,控制器输入等等...如果都写在一个类中,这个类就显得巨大且不易维护添加,高度耦合. 在使用并 ...

  5. 游戏设计模式阅读笔记11——行为模式(子类沙箱)

    目录 一.意图 二.动机 三.子类沙箱 1.适用场景: 2.缺点: 3. 优化: 4.可不写入基类的操作 子类沙箱是一种软模式,它表述了一个基本思路,但没有很多细节机制. 一.意图 用一系列由基类提供 ...

  6. 【阅读笔记】Java游戏服务器架构实战

    [阅读笔记]Java游戏服务器架构实战 书籍链接:Java游戏服务器架构实战 作者提供的源码链接:kebukeYi / book-code 这里对书籍中比较重要的知识点(精华部分)进行摘录(总结) 文 ...

  7. 多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | 帧同步和状态同步

    今天继续开新坑,尽管过了很多 Unix 套接字编程的坑,但是实际还是有很多不同场景和性能的需求,以及最服务器架构的内容也就接触过 preforking 和 master 带 worker 而已. 所以 ...

  8. 游戏设计模式实操经验:游戏结算功能实现的两个要点

    从事游戏行业1年多了,个中心酸不知从何说起.抛开非技术的不说,一个开发者需要面对的最大问题,可能就是和策划频繁改变的需求做斗争了吧,这时候就体现了设计模式的重要性,抛开正式的设计方式不说,先讲讲我1年 ...

  9. Head First设计模式(阅读笔记)-04.工厂模式

    披萨订购 假设要完成披萨订购的功能,披萨的种类很多,比如 GreekPizz.CheesePizz 等,披萨店会根据用户需要的披萨种类制作披萨,制作的流程包括prepare->bake-> ...

最新文章

  1. [创业经验] 白手起家的艺术
  2. 微型计算机的发展通常以什么为指标,微型计算机的发展以什么技术作为指标?...
  3. Android串口编程--开关灯Demo(附源码)
  4. collections 中的namedtuple
  5. 清华大学计算机系主任应明生,清华大学计算机科学与技术系导师简介:应明生...
  6. DBUtils 主要结果集说明
  7. python作者_Python
  8. 在linux不能连上互联网的情况下安装IE6
  9. 挑战性题目DSCT302:求不同形态的平衡二叉树数目
  10. 经典网络结构梳理:SSD目标检测算法。
  11. 激光雷达进入「规模化」上车周期?最大变数是什么?
  12. UR机器人双臂开发实例
  13. 运行无法打开计算机策略,“组策略不能打开”的解决方案
  14. 强大的python中如何画出美观的散点图
  15. 研二小硕的艰难实习路
  16. 算法导论-9.3-3-快速排序-最坏时间O(nlgn)
  17. 计算机操作及应用描述,计算机操作及应用教程
  18. 实用新型专利和发明专利区别如何区分实用新型专利和发明专利
  19. 自我驱动,如何构建个人的技术思维?
  20. LINUX系统下ORACLE19C客户端安装步骤

热门文章

  1. Android 养成记-1 --1.3 标签拾色器
  2. 用KEIL5打开KEIL4的文件
  3. excel中的宏如何用java表示_一文看懂RPA与Excel宏的区别
  4. 0基础学挨踢-国产达梦数据库dmPython安装和避坑(Windows/Linux,离线状态)
  5. 林大ACM培训day1心得
  6. java实现简单扫雷
  7. 安装WIN7时提示“缺少所需的CD/DVD驱动器设备驱动程序”的解决办法
  8. Android 分贝测试仪功能,你会的还只有初级Android工程师的技术吗
  9. OK6410——uboot
  10. Altium Designer 常用快捷键