MMO中人物移动同步要注意的一个地方

 

 

今天项目里的一个错误被揪出来了。

C=客户端

S=服务器

首先C选择一个点,发包给S;S收到后开始模拟行走,同时C也在行走,也就是说是两边都在各自模拟。起先这样设计的意图有两个

1)减少客户端的发包量,类似的一个是矢量包的计算

2)  防止加速外挂



从1)来说,确实可以减少包的量,但是是建立在用户鼠标点击是不改变方向的情况下。其实作为上行包来说,每秒多发几个包是可以接受的。重要的是S广播时候包的减少

从2)来说,这种屏蔽加速外挂靠的是一个匀速的模拟,但是并不是这样做才可以杜绝加速,关键点不在这里。


这样两边同时模拟带来的问题最严重的就是用户体验感的超差。最根本的原因是,两边同时模拟,当任何一方改变状态的时候,对方仍然以前之前的状态在进行操作,这个时候谁的数据准确?S吗?还是C的体验为优先。而且有很多因素可以加剧这种情况:

1)网络稍微慢点,网络传输的延时

2)C或者S因为未知原因任何一方卡了一下


假入人物从A1跑到A10,C端看到当人物在A5的时候,选择拐弯行走。这时候A5是作为起点,但是这个时候可能因为1),2)的原因(或者单单只要普通的网络延时),位置不准确(服务器可能已经走到A8)需要强制性的同步。这样的话,C的一些体验感可能就很郁闷了。。


所以在做同步上的同学切记,状态必须以一方的做为一个标准。

你可能感兴趣的:(C++,c,C#)