文档章节

游戏性能提升降帧处理方式

j
 jun9152143
发布于 2017/06/27 14:25
字数 936
阅读 10
收藏 0

游戏性能提升降帧处理方式_游戏开发_游戏设计_性能提升_课课家

      什么是降帧&为什么降帧?

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

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

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

  或者有朋友会问,如果我们的程序最少的逻辑间隔时间是0.1的话。所有的游戏逻辑都是间隔0.1判定一次不就好了?这不是很简单的事情?但实际上事情并没有那么简单。一般情况下我们人眼的录入认为是16帧每秒。

  现在的理论上满足16帧的游戏,会显得更加的流畅了,我们知道一个16帧的游戏,并不能让人觉得非常流畅。为什么呢?其实原因也非常简单。人看到的东西会有预判,现在你看到这个怪物在水平移动,如果说游戏表现出来的效果与你的预判是保持一致的,也许你会觉得这样是显得非常流畅的,但是如果怪物的移动跟你的预判不一致,那么你就会觉得这个游戏并不流畅。

  那么该怎么去降帧?

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

  怪物会有两种跟新模式

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

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

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

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

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

  对游戏感兴趣的朋友们可以在这方面深入的进行研究,游戏开发设计制作是属于一个比较复杂的项目,要想对游戏精通,还得从兴趣的基础上进一步的优化。

© 著作权归作者所有

共有 人打赏支持
j
粉丝 0
博文 113
码字总数 84802
作品 0
南通
当绘制的时候,是如何显示到屏幕的?

等等都是大家常用的渲染器(Path Render, 这里的渲染器特指最终会通过算法做像素染色. 而不是不是Web前端提到的, 两者之间存在着本质的差异),这些渲染器把程序提交的渲染Command(例如:D...

breakerror
06/04
0
0
Unity引擎后处理性能优化方案解析

这是侑虎科技第444篇文章,感谢作者Gordon供稿。欢迎转发分享,未经作者授权请勿转载。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群465082844) 作者主页:https://zhu...

UWA
09/12
0
0
CreateJS 新司机开车指南

CreateJS 新司机开车指南 2 人 TL,TR 最近在对前端互动游戏技术一些学习和探索,恰逢上一个小游戏使用了 CreateJS 技术,借此文对其使用做一次备忘,同时让想用 CreateJS 写小游戏的同学可以...

Tw93
07/29
0
0
复盘王者荣耀手游开发全过程,Unity引擎使用帧同步放弃状态同步

http://king.shandian.biz/88.html 如今已经大获市场成功的《王者荣耀》一直是业内各方关注的对象,而我们也知道这款产品在成为国民级游戏之前,也遇到过一段鲜有人知的调优期。也就是在201...

anypkv
2017/11/08
0
0
用C语言做一个横板过关类型的控制台游戏

前言:本教程是写给刚学会C语言基本语法不久的新生们。 因为在学习C语言途中,往往只能写控制台代码,而还能没接触到图形,也就基本碰不到游戏开发。 所以本教程希望可以给仍在学习C语言的新...

KillerAery
10/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Apache Bench学习笔记

使用apache bench测试并发请求 ab -H "X-IMATRIX-ACCESS-TOKEN:1234567" -c 1000 -n 1000 http://localhost:8080/portfolioes/1/performance...

OSC_fly
27分钟前
2
0
Oracle推出轻量级Java微服务框架Helidon

近日,Oracle 推出 了一个新的开源框架 Helidon ,该项目是一个用于创建基于微服务的应用程序的Java库集合。和 Payara Micro 、 Thorntail (之前的 WildFly Swarm )、 OpenLiberty 、TomEE...

小刀爱编程
28分钟前
5
0
mysql 按周统计

方法一 : 使用 DATE_FORMAT 格式化时间,格式化参数参考 -- 参考地址 SELECTDATE_FORMAT( create_time, '%Y%u' ) weeks,DATE_FORMAT( date_sub( create_time, INTERVAL WEEKDAY( cre...

小鸟00
32分钟前
3
0
深入理解JAVA锁的机制

1. synchronized实现原理 在java代码中使用synchronized可是使用在代码块和方法中,根据Synchronized用的位置可以有这些使用场景: 如图,synchronized可以用在方法上也可以使用在代码块中,...

laigous
33分钟前
2
0
Mysql几种索引类型的区别及适用情况

如大家所知道的,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。 那么,这几种索引有什么功能和性能上的不同呢? FULLTEXT 即为全文索引,目前只有MyISAM引擎支持。其可以...

ZhangLG
43分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部