游戏设计模式阅读笔记8——序列模式(游戏循环)
目录
一、意图
二、动机
三、游戏循环
四、实例代码
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——序列模式(游戏循环)相关推荐
- 游戏设计模式阅读笔记19——优化模式(空间分区)
目录 一.意图 二.动机 三.空间分区 1.适用场景: 2.实例代码 四.注意 1.划分是层次的还是平面的? 2.划分依赖于对象数量吗? 空间分区 · Optimization Patterns · ...
- 游戏设计模式阅读笔记4——重访设计模式(原型模式)
目录 1.<圣铠传说>例子 2.原型语言范式 现在有很多原型的术语,这里讨论的是传统的原型设计模式. 1.<圣铠传说>例子 但这种会产生众多的类,众多的引用,众多冗余,众多的副 ...
- 游戏设计模式阅读笔记18——优化模式(对象池模式)
目录 一.意图 二.动机 三.对象池模式 四.实例代码 五.注意 1.对象和池耦合的问题 一.意图 放弃单独地分配和释放对象,从固定的池中重用对象,以提高性能和内存使用率. 二.动机 比如粒子系统的调 ...
- 游戏设计模式阅读笔记13——解耦模式(组件模式)
一.意图 允许单一实体跨越多个领域而不会导致这些领域彼此耦合. 二.动机 当一个系统涉及到渲染,物理,声音,控制器输入等等...如果都写在一个类中,这个类就显得巨大且不易维护添加,高度耦合. 在使用并 ...
- 游戏设计模式阅读笔记11——行为模式(子类沙箱)
目录 一.意图 二.动机 三.子类沙箱 1.适用场景: 2.缺点: 3. 优化: 4.可不写入基类的操作 子类沙箱是一种软模式,它表述了一个基本思路,但没有很多细节机制. 一.意图 用一系列由基类提供 ...
- 【阅读笔记】Java游戏服务器架构实战
[阅读笔记]Java游戏服务器架构实战 书籍链接:Java游戏服务器架构实战 作者提供的源码链接:kebukeYi / book-code 这里对书籍中比较重要的知识点(精华部分)进行摘录(总结) 文 ...
- 多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | 帧同步和状态同步
今天继续开新坑,尽管过了很多 Unix 套接字编程的坑,但是实际还是有很多不同场景和性能的需求,以及最服务器架构的内容也就接触过 preforking 和 master 带 worker 而已. 所以 ...
- 游戏设计模式实操经验:游戏结算功能实现的两个要点
从事游戏行业1年多了,个中心酸不知从何说起.抛开非技术的不说,一个开发者需要面对的最大问题,可能就是和策划频繁改变的需求做斗争了吧,这时候就体现了设计模式的重要性,抛开正式的设计方式不说,先讲讲我1年 ...
- Head First设计模式(阅读笔记)-04.工厂模式
披萨订购 假设要完成披萨订购的功能,披萨的种类很多,比如 GreekPizz.CheesePizz 等,披萨店会根据用户需要的披萨种类制作披萨,制作的流程包括prepare->bake-> ...
最新文章
- [创业经验] 白手起家的艺术
- 微型计算机的发展通常以什么为指标,微型计算机的发展以什么技术作为指标?...
- Android串口编程--开关灯Demo(附源码)
- collections 中的namedtuple
- 清华大学计算机系主任应明生,清华大学计算机科学与技术系导师简介:应明生...
- DBUtils 主要结果集说明
- python作者_Python
- 在linux不能连上互联网的情况下安装IE6
- 挑战性题目DSCT302:求不同形态的平衡二叉树数目
- 经典网络结构梳理:SSD目标检测算法。
- 激光雷达进入「规模化」上车周期?最大变数是什么?
- UR机器人双臂开发实例
- 运行无法打开计算机策略,“组策略不能打开”的解决方案
- 强大的python中如何画出美观的散点图
- 研二小硕的艰难实习路
- 算法导论-9.3-3-快速排序-最坏时间O(nlgn)
- 计算机操作及应用描述,计算机操作及应用教程
- 实用新型专利和发明专利区别如何区分实用新型专利和发明专利
- 自我驱动,如何构建个人的技术思维?
- LINUX系统下ORACLE19C客户端安装步骤
热门文章
- Android 养成记-1 --1.3 标签拾色器
- 用KEIL5打开KEIL4的文件
- excel中的宏如何用java表示_一文看懂RPA与Excel宏的区别
- 0基础学挨踢-国产达梦数据库dmPython安装和避坑(Windows/Linux,离线状态)
- 林大ACM培训day1心得
- java实现简单扫雷
- 安装WIN7时提示“缺少所需的CD/DVD驱动器设备驱动程序”的解决办法
- Android 分贝测试仪功能,你会的还只有初级Android工程师的技术吗
- OK6410——uboot
- Altium Designer 常用快捷键