在做网络游戏的时候首先要做的是选择一种同步方式来使用,网上的文章都是说帧同步与状态同步的选择,但是又经常讲的模糊不清,我大概整理了一下,并且有一种我们现在项目用的网络同步方式

状态同步

状态同步就有好几个说法,说是同步状态,同步操作等,又找不到一遍文章能清楚的讲一遍什么是状态同步。

所以大概总结一下就是,状态同步是通过每个客户端发送自己的操作给服务器,这时客户端不进行任何动作,服务器统一计算后并把结果同步个每一个客户端。

这里要点就是,同步操作,服务器结算结果。

这里推荐两篇文章

这里讲了这两种同步方式的区别,但是依然没有很清楚。状态同步也找不到更好的文章,如果你有的话也请在评论区分享一下一起学习。

帧同步

帧同步是在关键帧的时候同步操作给服务器,服务器转发操作给每个客户端。客户端之间要接受到关键帧才可以进行操作。

帧同步里面有一个关键技术就锁帧,也就是如果没有收到广播的关键帧不能进行下一步操作。大家静止不动。

而现在的游戏会有一个聪明一点的方法叫做乐观帧锁定

乐观帧锁定通过定时发送关键帧的方法,不锁定任何客户端,服务器一定时间间隔就发包给每个客户端,包里可能是空包也有可能是你自己活着别人的操作。而客户端就通过定时或者每当操作就发包的形式告诉服务器自己的操作。

但不论是什么形式的帧同步都是客户端收到其他玩家的操作后自己模拟行为。所以这个就需要大家如果是随机的时候要保证一致,也就是有一样的随机种子,而且在每个客户端中无法保证一定一致,也就是这个原因帧同步一般会用着竞技类游戏,游戏都是一盘一盘的来,每盘开始就给大家统一的第一帧和随机种子,保证这个游戏在每个客户端中基本一致

其实在网速好的时候这些都不是问题,基本上不同客户端上的表现基本一致。

而当网速不一致时,当你选用乐观帧同步的话就可以保障网速好的不会被网速差的玩家卡住

帧同步有好多好文章,这里也推荐两篇

这两篇是已经讲的非常清楚,非常好的两篇文章

所以能看到,其实在手游时代,状态同步基本是不可取的,服务器压力太大,对网络要求太高。

而帧同步的话也会选择乐观帧同步,保证在网速好坏不同的情况下还能一起玩,并且网速好的玩家不会受干扰。

自己游戏的同步方式

我们是一个mmoarpg手游,也就是动作类网游。

由于我们的游戏类型,其实不需要真的非常同步,并且可能有很多个玩家同屏,首先抛弃状态同步

接着我们也不是竞技类游戏,所以基本上也不需要帧同步。

所以我们同步也就是客户端发送请求给服务器,服务器验证一下,如果出入太大强行拉回,不然也不返回给自己客户端,只同步位置给其他客户端。

技能上就是客户端请求使用技能,在技能中的打击帧告诉服务器这个人我能不能伤害,服务器判断并同步给大家这个伤害。

所以基本上算不上什么同步方式。

但是如果我们之后需要做更为严肃的pvp玩法,则需要帧同步来进行操作。这个可能会在后面补充

这里面还有很多可以一起讨论的地方,也希望大家评论一下一起讨论

还有一篇王者荣耀的同步技术文章

mtk 帧同步_【小松教你手游开发】【面试必读(编程基础)】网络游戏同步方式(帧同步和状态同步)...相关推荐

  1. 【小松教你手游开发】【unity实用技能】网游同步技术

    http://www.skywind.me/blog/archives/1343 转自http://www.skywind.me/blog/archives/1343 实时动作游戏在近年来得到迅猛的发 ...

  2. 【小松教你手游开发】【unity实用技能】unity游戏移植到WindowsPhone8平台上的一些...

    最近在移植u3d的游戏到WindowsPhone8上,WindowsPhone有多蛋疼就不说,移植的过程中还各种问题,稍稍总结一下 1.WindowsPhone账号在电脑上注册不要在手机上.手机上我就 ...

  3. 【小松教你手游开发】【unity实用技能】计算目标物体是否在自己的扇形视野范围...

    在做游戏开发中经常会需要到计算扇形的视野或者是受击范围的时候. 其实这个分为两部分, 第一部分是在扇形距离范围内(也就是不考虑角度,其实是圆形范围内) 第二部分是扇形角度范围内 第一部分很简单,Vec ...

  4. 【小松教你手游开发】【面试必读(编程基础)】堆和栈的区别(转过无数次的文章)...

    一.预备知识-程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其 操作方式类似于数据结构中的栈 ...

  5. 【小松教你手游开发】【unity系统模块开发】Unity5.5.2UI打包AssetBundle

    之前已经有几篇文章写打包AssetBundle,但毕竟没有实际在项目中写过都写的比较浅. 刚好最近项目更新Unity5.5.2就顺便由我来更新ui打包流程 这里就把这次的经验写一下 这里还是稍微解释一 ...

  6. 【小松教你手游开发】【unity实用技能】给每个GameObject的打开关闭加上一个渐变...

    在游戏开发中,经常会因为直接将GameObject,setActive的方式打开关闭,这种方式效果太过生硬而给它加上一个Tween 可能是AlphaTween或者ScaleTween. 再加上一个Pl ...

  7. 【小松教你手游开发】【unity实用技能】InvalidOperationException: ou

    InvalidOperationException: out of sync 在unity开发中出现这个bug. 在网上查了下是在迭代器中直接修改引起的.c#是不允许你在迭代器中直接修改. 改了一下确 ...

  8. 【小松教你手游开发】【面试必读(编程基础)】几种常用的设计模式介绍

    http://blog.csdn.net/xsl1990/article/details/16359289 转载于:https://blog.51cto.com/13638120/2084932

  9. 【小松教你手游开发】【unity实用技能】u3d 层次问题总结

    首先的首先,NGUI区分前后层次关系是用Depth值.已经跟z轴值无关 首先因为我自己用的是NGUI,所以我的u3d层次问题也就是NGUI的层次问题 先确定UI渲染顺序,Camera>UIPan ...

最新文章

  1. 漫谈Word2vec之skip-gram模型
  2. 如何通过 DJI SDK 控制无人机运动
  3. RocketMQ事务消息实现分析
  4. android餐厅管理系统,基于Android的餐厅管理系统的设计与实现
  5. 局域网速度变慢的故障分析
  6. 华为还是输了!双11战报出炉,离苹果仍有距离
  7. 如果外卖APP想窃听我,有几个骚操作?
  8. 【一天一个C++小知识】010.malloc/free和new/delete
  9. java.net.UnknownHostException 异常处理
  10. Photoshop提高照片对比度的几种实用方法
  11. 计算机基础必修上课是上机吗,关于大学计算机基础论文范文集,与上海财经大学国际工商管理学院相关毕业论文范文...
  12. R语言实战(统计分析1)
  13. laravel从入门到精通之 php excel设置单元格边框只显示竖条
  14. 使用cryptsetup加密硬盘
  15. 【python实现网络爬虫(4)】实习僧网站信息爬取(字体反爬虫破解)
  16. python制作图表(爬取数据之后分析最后制成图表)
  17. 【个人小程序和企业小程序的区别】
  18. 【Oracle】更新数据表字段值
  19. InfoGAN 网络训练过程介绍
  20. 【JVM 学习笔记 05】:JVM性能调优工具的使用和优化案例

热门文章

  1. 20155207 实验五 网络编程与安全
  2. UVALive3905 流星
  3. SAP物料主数据随笔
  4. 算法导论 CLRS 23.3 解答 (未完成)
  5. 关于.net中值类型的方法调用
  6. [原创] 共享两个有用的网页布局表格
  7. sql日期处理(出自邹建的book)
  8. iframe之间操作记录
  9. OpenCL将数组从内存copy到显存
  10. B2B多商铺初期权限数据库设计