`
sooxin
  • 浏览: 257622 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

【转载】网络游戏的位置同步

阅读更多
 有关位置同步的方案实际上已经比较成熟,网上也有比较多的资料可供参考。在《带宽限制下的视觉实体属性传播》一文中,作者也简单提到了位置同步方案的构造过程,但涉及到细节的地方没有深入,这里专门针对这一主题做些回顾。

  最直接的同步方案就是客户端在每次发生位置改变时都向服务器报告 ,服务器再转发给周围的其他玩家,其他客户端将对应的游戏实体移动到新的位置上。

  但是这样存在一个问题,每个玩家的位置都是自己先开始移动,一段时间之后才在其他玩家的客户端上表现出来。如果只是希望每个客户端上看到的游戏对象都同时开始移动,那可以让玩家的每一步操作都由服务器确认之后再执行,这样误差将缩减到不同客户端之间的网络延时差。但是显然的,这样的做法不可能真正被采用,因为这将使得玩家的游戏体验非常的糟糕。有谁能忍受连每走一步路都要卡一下的游戏呢?

  既然一定存在先后时间差,那需要一种方法来让不同客户端上看到的玩家位置不至于有太大的误差,尤其是不能有影响到游戏公平性的误差存在。根据误差出现的直接原因:时间差,我们应该能够想到一个解决方案,那就是让其他客户端设法弥补掉这段时间差内少走的距离。这样的话也就要求我们的消息包中多带一个开始移动的时间数据,用于其他客户端在收到这个消息包时计算对应的玩家实体已经移动过的时间和距离。

  我们以一个实际的例子来说明如何减少这种误差的影响。假设玩家A以速度V从P1点去到P2点,A的网络延时为T1,在A旁边有个玩家B,他的网络延时为T2。B收到服务器转发过来的移动包时,A在其自己的客户端上已经移动了T1+T2的时间,在这段时间内他自己已经走过了V*(T1+T2)的距离。如果这时在B的客户端上开始将实体A从P1移动到P2,那显然两个客户端上看到的A的位置始终存在V*(T1+T2)的误差。

  为了使A在B客户端上显示的位置与其实际位置的误差尽可能的缩小,一个简单的做法是直接将A的位置向前拖V*(T1+T2)然后开始移动,这样两者之间的误差便消除了。但这样会使得客户端的显示太鲁莽,要让其看起来平滑一些,我们可以考虑使用一些算法,比如计算出A从当前位置走到P2点还需要的时间,然后加快其速度使其在规定的时间内到达P2点,这样A和B看到的最终时间是相同的,但中间过程还是存在较多误差。另一种较好的做法是先让A以一个可接受的较快速度移动到其当前应该所在的位置稍前一点的地方,然后以正常速度移动到P2点,这样后面的移动情况与其实际移动情况基本吻合了。

  看起来这个方案很完美,但是这里却忽略了一个问题:我们假设的是每次移动时都知道玩家要去的确切位置。这在靠鼠标点击来移动的2D游戏中是正好合适的,但是在WOW一类的靠键盘来移动的3D游戏中却没有办法采用。WOW中的移动消息都只能向服务器报告当前的坐标及朝向信息。

  这类移动的位置同步其实也可以采用类似方案,服务器将移动玩家的当前位置信息广播给周围的其他玩家,当然其中也包含了时间戳。当其他玩家收到这个移动包后,表示的是在过去的某个时间里该玩家移动到了这个位置。如果只是简单地将其对应的实体移动到这个位置,那同样的,也存在位置误差。

  与上一种情况类似,如果我们知道该玩家的移动速度,再通过数据包中的时间戳,假设该玩家还在以相同的速度朝相同的方向移动,那我们也可以预测出该玩家从开始移动到现在这段时间内他走了多远了距离。我们也可以将其位置做适当的修正,并使其继续移动下去。

  我们需要先停下来考虑一下这些算法的部分细节。其中出现了一些数据是否应该包含在我们的每个消息包中,也就是我们需要考虑的另外一个问题:移动同步的消息中应该包含哪些数据,以及这些数据到底应该向哪些玩家广播。

  对于2D游戏的情况来说,我们的算法需要的数据有:玩家的速度V,玩家开始移动的时间T0,收到数据包的时间T1,玩家当前位置P1和玩家要去的位置P2。T1和P1从当前客户端上都可以取到,而速度V一般来说不会经常改变,至少不是每次移动时都不一样,所以我们可以为速度的改变设计单独的消息码,这样V值也是可以在客户端上取到的。最后,每个移动消息中包含的数据只需要有移动到的位置P2和开始移动的时间T0。

  其他客户端在使用特定算法将玩家移动到P2后会将其停在此处,直到收到下一个移动包时再开始移动。而对于在移动过程中又收到了新的移动包的处理过程基本类似,不做过多描述。

  对于3D游戏的情况,算法是基本相同的,但是没有目标点,替换为移动方向,比如是向正前方移动,还是向左或向右移动等。在这种情况下,只要没有收到玩家停止移动的消息,其他客户端上都会以最后一次收到的移动包的状态来继续模拟移动。

  所以,在网络偶尔卡一下的时候也会出现一些奇怪的现象。比如WOW中,看到队友直冲冲地走下了悬崖,你刚喊了句“怎么掉下去了?”只见队友又从身后走出来,还冒出一句:“没啊,我就在你旁边!”

  关于数据要向哪些人广播的问题,其实很简单,哪些人会看到这个玩家就需要向哪些人广播。不管是直接在主屏幕上看到还是在大地图上看到的代表其位置的一个点。但是,针对不同的人使用的广播策略还是存在差异。

  在《带宽限制下的视觉实体属性传播》一文中提出了一个方案很值得参考。该方案提出的基础是因为3D空间透视的原因,离你很远的一个玩家移动了10米,最终在你的显示器上看到的位移可能只有一个象素;而离你不到一米的一个玩家虽然只移动了一米,但最终显示出来的位移可能会有几十个象素。所以,远处玩家的移动并不需要非常严格的关注,但近处玩家的移动同步需要非常高的优先级。

  这个方案的实现还依赖于另一项技术要求,玩家的属性更新以一定的频率来进行,更新时比较一下当前属性值与上次更新时的属性值,如果存在差异则通知客户端更新,另外如果中间跳过了某次更新也不会对客户端表现及游戏公平性造成什么影响。比如这里要处理的玩家坐标,第一次移动到A点,第二次从A点又移动到B点,如果移动到A点的更新包没有发送,直接发送了移动到B点的更新包,这将不会对游戏逻辑产生大的影响。

  这套方案基本上是为3D游戏的实体属性广播优化而设计的,在2D游戏中很难使用。一是斜45度视角的2D游戏中屏幕顶端、中间和底部任何一个位置上的玩家移动,其距离和象素比是完全相同的,因为画面不存在透视,所以也就没有远处对象更新频率低这一可能。另外2D游戏中的移动与3D游戏也存在差异,具体情况前面有详细描述,2D游戏中基本上每一次移动都需要广播,不能跳过哪一个,否则玩家看到的现象就是在乱跑,这也必将影响到技能的使用等游戏逻辑。

  有关位置同步所涉及到的一些技术细节及优化方案上面描述了一部分,但是在实际的应用中是否会使用还是要看具体游戏的需求。比如大话类型的游戏,其本身对位置的精确同步就没有要求,两个客户端上出现一前一后的移动也不会影响任何的游戏逻辑,所以前面提到的同步方案可能都用不上。

  而对于一些同步要求很高的游戏,如WOW中盗贼这类职业的需求,上面的方案可能还不够细致,还需要设计更加有效的同步方案。

  另外,在位置同步过程中还有一个不容忽视的问题是外挂。我们不能像WOW那样完全依赖客户端,如果没有暴雪那样强硬的封号措施,游戏也就成为了外挂们的温床。所以,如何在服务器端模拟每个客户端的移动,如何检测出客户端是否存在作 弊行为,也是需要重点关注的一个问题。
分享到:
评论

相关推荐

    网络游戏帧同步资料

    帧同步是一种在网络游戏中广泛应用的技术,它的主要目的是解决多人在线游戏中的实时交互问题,确保所有玩家看到的游戏状态是一致的。本资料集包含了关于帧同步的深入解析,对于想要理解网络游戏运行机制,特别是对...

    网络游戏-用于位置确定的同步网络装置时间传递.zip

    在网络游戏领域,位置确定的同步网络装置时间传递是一项至关重要的技术。它涉及到网络游戏中玩家角色的位置同步、动作协调以及游戏世界的实时性。本文件“网络游戏-用于位置确定的同步网络装置时间传递.zip”包含了...

    网络游戏-同步网络交换机.zip

    这包括角色的位置、动作、游戏状态等关键信息的实时同步。 同步网络交换机一般具备以下特点: 1. 低延迟:为了确保游戏体验,交换机需要快速处理和转发数据包,尽可能减少传输延迟。 2. 高带宽:网络游戏通常需要...

    游戏操作同步器,游戏多窗口同步工具

    游戏操作同步器,游戏多窗口同步工具,可以游戏多开,然后同步鼠标、键盘操作。 打开游戏客户端后,打开本软件,然后拖动图标选择游戏窗口,将需要同步的游戏窗口都拖到软件界面后,设置主控制游戏窗口,然后开启...

    网络游戏-同步于因特网的住宅网络系统.zip

    "网络游戏-同步于因特网的住宅网络系统.zip"这个压缩包文件,显然是围绕着网络游戏如何在家庭网络系统中与互联网进行同步这一主题展开的。其中包含的"同步于因特网的住宅网络系统.pdf"文件,很可能是详细阐述了相关...

    网络游戏-同步发光的射币游戏装置.zip

    《网络游戏-同步发光的射币游戏装置》是一个深入探讨网络游戏设计与实现的专题资料,主要聚焦于一种特殊的射币游戏装置。在这个游戏中,同步发光的元素为玩家带来了独特的视觉体验,提升了游戏的趣味性和沉浸感。这...

    网络游戏-网络同步的方法与装置.zip

    综上所述,"网络同步的方法与装置"是一个深度探讨网络游戏网络同步技术的主题,包括同步原理、常用方法、优化策略以及实现设备等多个方面,对于从事网络游戏开发或对此感兴趣的读者来说,这份资料将提供宝贵的参考。

    网络游戏中移动同步问题的解决方案

    网络游戏网络方面的算法

    网络游戏-卫星网络基于地面站的分布式位置管理同步控制方法.zip

    《网络游戏-卫星网络基于地面站的分布式位置管理同步控制方法》这一资料主要探讨了网络游戏在卫星网络环境下,如何通过地面站实现分布式位置管理和同步控制的关键技术。以下将详细阐述其中涉及的重要知识点: 1. **...

    网络游戏-计算机网络中的同步.zip

    这个压缩包“网络游戏-计算机网络中的同步.zip”包含了一个名为“计算机网络中的同步.pdf”的文件,很可能是详细探讨了网络游戏与计算机网络同步的学术或技术文档。下面我们将深入探讨网络游戏中的同步问题及其相关...

    网络游戏-同步网络的可编程部件及其管理方法.zip

    4. **分层同步**:大型网络游戏可能会采用分层同步策略,将关键信息(如角色位置和生命值)与非关键信息(如环境效果)分开处理,优先保证关键信息的同步。 5. **负载均衡**:当玩家数量增多时,服务器压力也会增大...

    网络游戏-网络同步装置.zip

    网络游戏中的网络同步装置是实现多人在线游戏体验的关键技术之一。这一技术主要负责处理游戏中玩家间的交互数据,确保所有参与者在同一时间看到相同的游戏状态,从而营造出实时、连贯的虚拟世界。下面将详细探讨网络...

    网络游戏-同步家庭网络装置的内容的方法和设备.zip

    本压缩包文件"网络游戏-同步家庭网络装置的内容的方法和设备.zip"提供了关于这个主题的详细资料,主要包含一个名为"同步家庭网络装置的内容的方法和设备.pdf"的文档,它深入探讨了如何实现家庭网络中的游戏数据同步...

    网络游戏-网络同步技术.zip

    网络游戏中的网络同步技术是实现多玩家在线互动游戏的关键所在,它确保了所有参与者在同一时间看到相同的游戏状态,从而提供了一种共享的虚拟环境。网络同步技术涉及到多个领域,包括网络通信、数据压缩、延迟补偿...

    网络游戏-网络同步设置的方法、装置及系统.zip

    首先,网络同步的目标是解决延迟问题,确保所有玩家看到的游戏状态一致,无论他们位于全球哪个位置。网络游戏中的同步方法通常分为两类:预测式同步和权威式同步。 预测式同步是基于客户端预测的游戏逻辑,客户端会...

    网络工程师考试同步辅导

    网络工程师考试同步辅导网络工程师考试同步辅导网络工程师考试同步辅导网络工程师考试同步辅导网络工程师考试同步辅导网络工程师考试同步辅导网络工程师考试同步辅导网络工程师考试同步辅导

    网维大师游戏不同步处理方法)同步节点

    在IT行业中,网络维护是至关重要的任务之一,尤其是在游戏服务器管理中。"网维大师"是一款专门用于网络管理和维护的工具,它可以帮助管理员高效地监控和优化网络环境,确保服务的稳定性和玩家的游戏体验。当遇到...

    网络游戏-同步光网络和光传送网络统一调度系统及其方法.zip

    《网络游戏中的同步光网络与光传送网络统一调度系统及其方法》 在网络游戏领域,为了提供稳定、低延迟的游戏体验,网络基础设施的优化至关重要。这里提到的“同步光网络(Synchronous Optical Networking,SONET)...

    网络游戏-在同步分配式网络系统中保持时钟同步的方法和实施该方法的同步装置.zip

    在网络游戏的开发与运营中,保持网络系统中的时钟同步是一项至关重要的技术。尤其是在分布式环境中,各个节点间的时钟同步对于游戏的公平性、玩家体验以及服务器协调具有决定性作用。"网络游戏-在同步分配式网络系统...

Global site tag (gtag.js) - Google Analytics