GameRes游资网

 找回密码
 立即注册

《魂斗罗:归来》子弹中没中,没你想得那么简单!

发布者: 一元 | 发布时间: 2017-8-24 10:31| 评论数: 1

游戏程序
平台类型:  
程序设计:  
编程语言:  
引擎/SDK:  
无数玩家童年的神作重新回归,手机端多人联机,呼朋引伴一起重温当年的热血大作。

除了IP,剧情,对工程师而言,《魂斗罗:归来》更要解决的联机同步和命中同步等问题,简单说,一颗子弹打没打中,没你想得那么简单!

微信图片_20170824102651.jpg

客户端高级工程师聂鹏和田亚涛本周在《论道》开聊,小小子弹命中的大问题!

移动同步

最左边是1P玩家的持续,中间是DS,右边是3P玩家。玩家走路,会有一个MoveStep,MoveStep里包括了各种移动计算,操作以后它会把移动的包,即SendMove发到服务器,服务器会根据这个包进行MoveStep。

计算之后,根据当前服务器计算的结果和客户端上报的结果,进行对比,即CheckCheat,看位置有没有差异,客户端有没有作弊。如果有作弊,客户端会向iP玩家发送一个AdjustOwner,进行校正,校正可能会导致1P玩家有拉扯。

微信图片_20170824102655.jpg

瞬发型同步模型和投射类同步模型

微信图片_20170824102658.jpg

瞬发型同步模型中,需要达到的目标是本地预表现,响应及时,体验顺畅。核心点是命中校验和反外挂。

1P玩家发送射击开始和结束事件,过程由DS计算并同步给3P玩家表现。本地检测命中后预表现命中效果,需发送当前时刻的状态序号给DS做命中判定。DS收到后回滚角色发射时刻信息,校验弹量、射程、方向、位置、阻挡等信息。验证通过,执行伤害并同步给所有客户端。

微信图片_20170824102701.jpg

这是本地发射开火,但并不会真的发射子弹出来,服务器开始创建子弹,同时给两端玩家进行。假设他们一起开始,伤害是在DS进行的,本地只是预表现,不做检测。目标是牺牲局部实时性,与3P保持弹道一致,公平性优先。核心点是延迟补偿,平滑差值。

外网偶尔会反馈一些问题,比如命中无效、击穿问题、弹量闪跳,这些都是非常影响体验的。

命中无效就是打着没伤害,第二就是会穿人,子弹会穿过去,还有就是在设计的时候,按着开枪的时候,弹量会闪跳。

命中无效:回滚250毫秒历史事件

微信图片_20170824102704.jpg

在C/S架构中,DS收到的目标是一个RTT前,敌人所在的位置,当你扣下扳机时他已经跑了。这个大部分原因是网络延迟。

目前的解决方案是,回滚250ms的历史事件,回滚到这个点,没有取到信息,之前是会判定命中无效。如果大于250ms,还会增加一个检查,看你是不是还在这个位置。如果你没动,对方没动或动了但在250ms之内,还是会产生伤害,只是伤害会产生延迟。

via:Gad

最新评论

huangjinlu 发表于 2017-8-26 14:30:10
所有数据都在内存中,计算一下好了,没那么复杂吧:
如果是快速射出:直接通过技术射出角度和速度就可以了.还可以直接随机给予命中几率.
如果是慢速射出:那也就计算碰撞就好了。
  • 伽马数据8月简报:《我叫MT4》国内月流水破
  • 月入2亿能进前十,海外游戏不断侵蚀国内用
  • “后手游时代”对细分领域的一些思考:“放
  • 论如何正经摸鱼:从《欧呜欧(OWO)》看游戏
  • 2018,手游出海市场格局将重新洗牌!
  • 伽马数据《游戏企业品牌报告》发布:超4千

小黑屋|稿件投递|广告合作|关于本站|GameRes游资网 ( 闽ICP备05005107-1 )

GMT+8, 2018-9-21 06:27

快速回复 返回顶部 返回列表