之前公司做一款类皇室战争游戏,实时性操作要求不是那么强,最近在找工作,自己做了一个demo,模仿王者荣耀的moba游戏,实时性操作非常强,两个游戏都是帧同步,因为实时操作的问题,导致两个项目架构有很大不同。例如:服务器给客户端同步间隔时长,客户端逻辑层驱动,操作执行时间各不相同等。今天总结一下。

1. 类皇室战争游戏:

直接说架构了,稍后再进行解释。服务器每间隔一个关键帧:200ms也就是4个逻辑帧,向房间内所有玩家推送上个关键帧内,所有玩家的操作信息,和该关键帧的帧号。客户端会根据服务器发送过来的关键帧帧号推算出服务器帧同步开始时的开始时间戳。然后根据这一时间,客户端本地也进行逻辑帧同步计时,客户端每间隔一个逻辑帧就把自身逻辑帧计数器加一。玩家操作的时候,客户端根据当前帧 + 一个关键帧 + 网络延迟帧,计算出该操作的执行帧,然后把操作消息立刻发送给服务器。当到达执行帧的时候,客户端执行操作。客户端逻辑帧的驱动严格意义上说,不是靠服务器来驱动的,是靠客户端本地的逻辑帧计数,来驱动的。服务器发来的关键帧,只是用来同步操作。

为什么这样设计呢?

1). 因为塔防类游戏玩家操作不会很频繁

2). 建造的建筑,开始出兵不是建造完之后立马出兵的,是等待每一个回合开始的时候,才开始出兵。这就使得对客户端操作的相应可以等待服务器下一个关键帧传来的时候,在执行。

3). 如果客户端逻辑帧改成服务器驱动,那服务器就得每一逻辑帧都向客户端推送消息,消耗的流量肯定很大,而且没有必要。

综合上面的原因上个项目,同步架构设计为:服务器间隔四个逻辑帧向客户端推送操作消息,客户端每一个逻辑帧处理由本地驱动。

2.moba游戏(我自己的demo):

设计架构:

服务器每间隔一个逻辑帧(50ms)向客户端推送操作消息,客户端每一个逻辑帧处理完全由服务器驱动。玩家摇杆控制消息会很频繁的发送给服务器,优化为客户端间隔50ms将玩家在此50ms内进行的操作,发送给服务器。

这样设计的原因:

1. 摇杆控制的moba游戏,玩家操作频繁,而且必须尽可能快有反馈,这就要求服务器必须将玩家操作尽快推送出去。

2. 玩家进行的摇杆控制,操作太过于频繁,如果每次都直接向服务器发送操作,会导致传输流量过大。客户端每间隔50ms,发送一次。而且,还有一个优化,如果客户端按住一个方向不动,不松手,而且不改变方向,就不会发送操作,只有在方向改变的情况下才发送。

总结:

两种方案不同之处:

1. 客户端逻辑帧处理的驱动不一样,类皇室是靠客户端自身驱动,moba是靠服务器驱动。

2. 玩家进行操作的频率不同,导致操作命令执行的时间不同,类皇室的执行帧数是当前帧 + 关键帧 + 网络延迟等帧数,moba是客户端收到消息立马执行

3. 玩家进行操作后,客户端发送把玩家操作指令给服务器的即时性不同:类皇室是立即发送,moba是客户端50ms(一个逻辑帧)发送一次。这样也就是说moba游戏执行帧是当前帧 + 一个逻辑帧 + 网络延迟帧。

这就是两个项目帧同步方面,给我的一些启示,每一个项目,根据需求、玩法的不同,有不同的方案架构,只由最符合项目要求的方案才是最好的方案。

总结moba游戏与皇室战争类游戏帧同步区别相关推荐

  1. 帧同步_微信小游戏接入“熊孩子噩梦”健康系统 帧同步能力上线

    3月31日,微信小游戏官方公众号"做个小游戏"发文宣布全新面向未成年人保护的健康系统已经上线,该系统联动"成长守护平台"的功能,可以更好助力家长群体对于未成年人 ...

  2. 《皇室战争》游戏设计师:顶级卡牌竞技游戏的‘平衡之道’

    本文转自:https://news.cnblogs.com/n/565584/ 2016 年,芬兰的 Supercell 再次成为全球手游收入冠军,目前该公司在线的 4 款游戏里,表现最好的是< ...

  3. Java游戏开发——飞行射击类游戏

    使用到的素材文件夹: 素材说明:bg0.jpg是背景图片.bomb_enemy是敌机爆炸时按顺序播放的四帧图片,bullet_0.png是子弹图片,enemy_alive.png是敌机图片,playe ...

  4. python设计棋牌游戏_python开发棋牌类游戏

    pycharm专门针对用户打造的一种可以进行编辑的工具,它的功能设置比较强大,而且具有跨平台的使用特性,能方便用户通过跨平台的方式使用该软件,有效节省的使用时间,那么这款详情>> 阅读: ...

  5. pygame制作rpg类游戏或者模拟经营类游戏的思路

    Pygame 能够支持开发 RPG 类或者模拟经营类游戏.Pygame 提供了图形界面.事件处理.音频处理等基础功能,开发者可以利用这些功能实现自己的游戏逻辑. 例如,开发者可以利用 Pygame 实 ...

  6. [wp7游戏]wp7~~超级血腥类游戏~~集合贴~~

    点击图片即可下载哈~~~   [wp7游戏]僵尸围城 1.0   [wp7游戏]无限塔 1.0   [wp7游戏]恐怖大厅 1.0   [wp7游戏]精英骑兵 1.0   [wp7游戏]异形大战 1. ...

  7. 游戏美术干货:各大MOBA类游戏视觉包装设计解析

    MOBA英文全称为Multiplayer Online Battle Arena Games,意为多人联机在线竞技游戏.但是与CS等游戏又明显不同,Moba广泛使用于Dota类游戏,是作为类Dota的 ...

  8. 使用UE4制作RPG类游戏(学习笔记6)(技术笔记5) <刺客信条>

    项目介绍 SLG:策略游戏        SRPG:模拟类角色扮演游戏        FTG:格斗游戏        SPG:体育竞技类游戏        MSC∶音乐游戏        RCG(RA ...

  9. EA出品的java射击类游戏,八款人见人爱的大型射击游戏,虽然相对经典但不过时...

    现在的游戏发展很快,各种类型的作品应有尽有,对于第一人称射击游戏,也早就不是那些简陋单一的作品了,现在的这类作品,越来越真实,而且玩法更加出色,内容也更丰富,再加上当前先进引擎的表现,游戏体验起来,使 ...

最新文章

  1. Rendering Problems Exception raised during rendering:
  2. 陆奇:不确定的世界需要更多对话,人工智能需要人监督
  3. springboot rabbitmq direct exchange和topic exchange 写法上关于路由键的区别
  4. 提高SQLite每秒INSERT的性能?
  5. UILabel 高度的自适应与获取
  6. JQeury form插件的ajaxForm方法和ajaxSubmit方法的区别
  7. listview winfrom 表头_winform ListView点击行表头,排序
  8. endnote 参考文献加序号_EndNote在Word中插入文献不能自动生成编号 - 解决方案
  9. CentOS 7配置Let’s Encrypt支持免费泛域名证书
  10. 页面查询条件选框被隐藏的问题
  11. elementUI 学习入门之 Button 按钮
  12. hive 建表_大数据面试必备 | Hive数据仓工具面试题!
  13. LeetCode详细题解-Java版
  14. 继电保护原理4-自动重合闸
  15. Win7报错:Explorer.EXE不支持此接口的解决办法
  16. 微信支付接口操作说明
  17. 在HTML中实现两个div并排显示
  18. html分列代码,实现分列的两段excel vba 分列代码
  19. 智商黑洞(门萨Mensa测试)4
  20. 微信企业支付(一)注意

热门文章

  1. 微信提现接口一秒提现多次只扣一次钱
  2. python+vue+django旅游景点酒店线路套餐管理系统
  3. RabbitMq无法访问http://localhost:1567,Failed to start Ranch listener {acceptor,{0,0,0,0,0,0,0,0},5672解决
  4. 分析销售预测对企业发展的重要性
  5. 通过Java实现双色球原理
  6. MySQL常见的四种隔离级别!
  7. Windows x64隐藏可执行内存
  8. 指数矩阵(exponential matrix)
  9. 知乎热议:发Top5和FieldTop是什么感觉?
  10. Linux配置清华大学yum源,更换清华大学yum源