一句话说清帧同步(附服务器Golang关键代码,客户端JS关键代码)。

本文深入解析帧同步概念,通过类比工作场景解释渲染帧与逻辑帧的区别,帮助读者理解帧同步的核心思想。并提供服务器Golang及客户端JS的帧同步关键代码,为游戏开发中的帧同步实现提供指导。
摘要由CSDN通过智能技术生成

任何对帧同步有疑问的人,都应该来看这篇文章,这是参考了2个帧同步模型,遇到各种问题并一一解决之后,彻底明白帧同步讲的是什么玩意的一篇文章。断断续续修改了将近2个月,说多了都是泪:(。

言归简短,书归正传。

关于帧同步实际的做法,网上一搜一大把,但是写这些文章的人并没有真正的为读者考虑。

很多人看了之后,似懂非懂。

那为什么不懂呢?

先不说别的,这里有几个在帧同步模型里的关键术语要搞懂。

1.帧。

2.逻辑帧。

3.渲染帧。

什么是帧?

在不同的语境里有不同的含义:

在动画里,帧是动画影像最小单位即单幅影像画面。

在网络传输中,帧是最小的数据传输单位。

在物理内存中,最小的存储单位也叫做帧。

这些帧的含义都是从英文Frame来翻译过来的,再看Frame的意思。框架,边框,有木架的,有架构的。

那么就可以知道了,帧并不是指特定的事物,倒不如说它是一个测量某种东西的最小单位,如斤,千克,厘米,这种某种度量衡的一种测量单位。

而且这种单位是架构的单位。到了这里回头看帧同步

直接替换概念,就是最小单位同步。至于是什么事物的最小单位,因为动画和游戏的连续画面要在时间维度里才会存在,

所以这个最小单位其实指的是时间单位

为什么说要替换概念,因为做游戏开发,做过客户端开发的,都知道FPS这个概念,Frames Per Second,每秒帧数。

如果不替换概念,很容易就把此帧(帧同步)当做彼帧(FPS的Frame帧)。这就是最蛋疼的地方了。为什么蛋疼?接着看。

渲染帧 在Unity,Cocos,Laya等游戏客户端引擎里都有一个函数叫Update。只要做过客户端开发的都不陌生。这在每一帧渲染之前会调用一次Update,在Update里面可以增加自己的逻辑处理(自己写的代码),如更新精灵位置、角度等,渲染的时候会去取精灵的这些属性进行绘制。就是在每一帧渲染显示到屏幕之前,都会执行这个Update里的代码,这个帧 就是渲染帧,这个帧的运行是由游戏引擎控制的,除了我们自己在Update函数中写的逻辑,剩下的都是引擎自己运行的,不以写程序的人的意志为转移。

游戏的常识里都知道要买好的显卡,这样游戏看起来流畅,不会卡成纸片人。为什么会这样,其实说白了,游戏就是玩家可以操控交互的程序,程序是什么?百度百科里说计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。这些指令的目的呢?其实是处理数据啊。不管是用支付宝付款,还是打一把dota,不管是数据从硬盘里加载到内存里,在内存处理过后,经过显卡显示在屏幕上,还是玩家用鼠标操作英雄在游戏里厮杀,都是代表数据的电信号被程序处理的结果,当然这些处理随着数据的变化和显卡的最大处理能力都会有一个极限。

当把数据看做水流,显卡看做水管,水太多,水管不够粗的时候,水就会流的慢,在游戏程序里的表现就是卡顿,因为显卡处理不过来啊,数据不能快速顺畅的显示在屏幕上。

以上是卡顿的原因。

那渲染帧在其中起的什么作用?

渲染帧就是引擎处理数据直到处理完成后并渲染到屏幕上的一个最小时间内做的一切事。

打个比方就相当于大部分人平常上班,每天上一天班一样。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值