文档章节

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

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
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
游戏引擎开发系列——消息循环篇

写了很多关于IOCP和OLEDB的文章,今天换个话题,不然很多网友都以为俺就是一服务端程序,其实我真正的身份是——程序员,什么都写的程序员,呵呵呵。 这回讨论的话题主要集中到游戏引擎上来,...

Matrix4X4
2012/04/18
486
0
unity 游戏性能优化

游戏性能问题主要涉及到3个方面:1 CPU2 GPU3 内存 CPU 方面主要降低单帧的耗时,以及避免出现卡帧cpu问题主要解决思路, 将复杂任务分解到多帧中去; GPU问题,降低游戏的drawcall,降低游戏...

李勇2
2015/10/12
207
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0
java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
2
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
13
3
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部