您好,欢迎来到锐游网。
搜索
您的当前位置:首页再谈网络游戏同步

再谈网络游戏同步

来源:锐游网

呵呵,一年前的这个时候发过一系列讨论网络游戏同步的帖子。
一年后的今天,再重新讨论讨论这个问题。。。

不知道大家是否碰到过这种情况,当某个玩家发出一个火球,这个火球有自己的运动
轨迹,那么如何来判断火球是否打中了人呢?大部分情况,当策划提出这个要求的时
候,一般会被程序否认,原因是:太麻烦了,呵呵。复杂点的还有包括两个火球相撞
之类的事情发生。

那么网络游戏中,是否真的无法模拟实现这种模拟呢?

首先我们来看看模拟此种操作会带来什么样的麻烦:
1,服务器必须trace火球的运行轨迹,乍一想,挺慢的。
2,网络延迟,传过来有延迟,传过去有延迟,延迟还不稳定,麻烦。
3,都有两点解决不了了,接下来不愿意再想了。

呵呵,实际上呢,对火球的模拟比对人物运动的模拟要轻松很多,原因很简单,火球
的方向不会变。下面来看看具体用什么样的结构来实现:

不知道大家是否还记得我去年这个时候提到过的Dead Reckoning算法,我们要模拟火
球运动的关键就在于一个叫Moving Objects Tracing Server的服务器程序,这个服务
器是干什么的呢。这个服务器接收主游戏服务器发过来的注册事件的信息,比如有个
玩家,开始移动了,那么主游戏服务器就把该玩家的运动PDU,包括方向,速度,加速
度,起点发给MOTS (Moving Objects Tracing Server),然后MOTS自己开始对其运行
进行模拟,当游戏服务器发来第二个PDU包的时候,则对各个物件的位置进行修正,并
重新开始模拟。那么,我们模拟的目的是什么呢?当然是发生某些事件,比如说碰撞,
或者掉入地图的某个陷阱的时候,会将该事件回发给主逻辑服务器。然后逻辑服务器来
处理该事件。

那么,对于火球的处理,也和处理其他玩家的同步一样,当接收到玩家的发火球的指令
以后,产生一个火球,并指定其PDU信息,在MOTS上注册该个运动物体。当MOTS自行模
拟到这个物体和其他玩家或者NPC物体产生碰撞,则通知主逻辑服务器,然后主逻辑服
务器产生相应的动作。

那么关于延迟呢?有些人也许会说,比如说前面有个火球,我本地操纵的小人其实躲过
去了,但是因为网络延迟,在服务器上我并没有躲过去,那么怎么算?呵呵,不知道大
家玩过星际没有,有没有发现在星际中玩多人连线模式的时候,有一点最特别的地方,
就是控制一个小兵的时候,点了地图上的某个位置,但是小兵并不会马上开始移动,而
是有一定的延迟,但是这一小点延迟并不能掩盖星际的经典,同样的理论用到这里也成
立。对于客户端的控制,当玩家操纵的主角改变PDU信息的时候,确保信息发送到服务
器之后,再开始处理本地的操作指令,这样就能保证本地的预测和服务器的预测几乎是
没有什么误差的,即使有很小的误差产生,以服务器为主,这样玩家也不会有太大的抱
怨。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ryyc.cn 版权所有 湘ICP备2023022495号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务