游戏提高性能 游戏降帧处理

时间:2024-03-11 21:11:49

什么是降帧&为什么降帧

一般情况下我们为了提高整个游戏的体验,所以我们一般会将游戏的帧数(每秒钟刷新多少次)设置的比较高。一般情况下,我们的游戏所有的代码都是一帧执行一次。为了让每一帧都变成真的关键数据帧。不过,部分手机能性能可能跟不上,或者计算量太大的情况下,手机的运算速度不能够支持的情况,过高的性能消耗就会拖慢运算的速度,让一秒内没有办法打到满帧。所以就会觉得游戏变得卡顿。

其实一部分逻辑并没有必要每一帧都去执行,可以将他们隔几帧运行一次也不是不可以。比如说伤害值的运算,伤害应该与游戏运营的帧数无关,比如每0.1秒执行一次伤害代码,那么在满帧60帧的情况下,其实每6帧执行一次就OK。

或许你会问,如果我们的程序最少的逻辑间隔时间是0.1的话。所有的游戏逻辑都是间隔0.1判定一次不就好了?这不是很简单的事情?但实际上事情并没有那么简单。一般情况下我们人眼的录入认为是16帧每秒。那么理论上满足16帧的游戏,我们就应该觉得很流畅了。但是你我都知道,16帧的游戏,并不能让人觉得非常流畅。为什么?原因也非常简单。人看到的东西会有预判,你看到这个怪物在水平移动,如果游戏表现出来的效果与你的预判是保持一致的,那么你就会觉得这是非常流畅的,但是如果怪物的移动跟你的预判不一致,那么你就会觉得这个游戏并不流畅。回答一下刚才自己提问的问题。为什么不可以,因为你把业务堆积到某一帧里边去了。所以这一帧里边的运算量跟你没有降帧之前的运算量是一致的,相对于没有运算的帧来说,你是卡顿的。这个时候。一会卡顿一会流畅。或许你打印出来的每秒的帧数是够60的。但是你表现出来的效果并不流畅。

我们之所以希望能提高帧数,是为了制造流畅的感觉。但是降帧则会违反这种感觉。所以游戏的帧数不能降低,或者在准确一点来说,游戏的View的帧数不应该降低,减低的应该是逻辑帧数。

请原谅我取了一个比较迷惑的题目。其实这样的原因,是希望你能够读下去。而不是看一眼题目就自以为知道具体是怎么处理了。

怎么降帧

从上文中,我已经提到了。我希望将游戏的帧数分为两种,一种逻辑帧,一种View帧。View帧是满帧在跑的。逻辑帧则是间隔执行的。也没错。上文中已经提到了,简单的区分这两种更新的实际也并不合适。因为依然会卡顿。那怎么才会不卡呢。将数据量分摊到各个帧里边。

怪物会有两种跟新模式

1、View更新:用来更新他的位置,动画一类

2、用来更新行为:攻击、打出伤害等等

 

主循环会有多个对象列表比如说6个

主循环会将每一次的Update标上记号。调用所有的对象的View更新方法和与标记相对应的对象列表的逻辑更新。

这样就将所有的逻辑分摊到了各个帧数里边。让各个帧数更平均一些。达到流畅的目的