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

本文探讨了游戏循环的设计,包括无阻塞处理输入、固定时间步长与动态时间步长的影响。游戏循环的目标是与处理器速度和玩家输入解耦,确保在不同硬件上游戏速度的一致性。介绍了限制帧率、基于时间的更新和固定时间步长刷新等方法,同时讨论了它们的优缺点,如电量效率和同步问题。最后,提出了动态时间步长作为平衡性能和稳定性的解决方案。
摘要由CSDN通过智能技术生成

目录

一、意图

二、动机

三、游戏循环

四、实例代码

        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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值