影子跟随算法由普通DR(dead reckoning)算法发展而来:
1. 屏幕上现实的实体(entity)只是不停的追逐它的“影子”(shadow)。
2. 服务器向各客户端发送各个影子的状态改变(坐标,方向,速度,时间)。
3. 各个客户端收到以后按照当前重新插值修正影子状态。
4. 影子状态是跳变的,但实体追赶影子是连续的,故整个过程是平滑的。
图1 算法演示
前面的1号终端控制红色飞船P1向左飞,并把自己的状态时时告诉服务器
后面的2号终端上接收到飞船P1的影子S1的状态(向左移动),并让P1的实体追赶S1
“影子跟随算法”支持非可靠传输协议,如果使用非可靠传输,那么我们按照特定频率(如每秒10次)定时发送状态更新,因为协议中每个更新包出了位置外还有速度、方向和时间,甚至还能加速加速度,因此我们丢一个包没有关系,可以根据后来的包重新计算插值。只有关键状态更新时才需要可靠传输,这就避免了TCP中丢包时RTO指数增长造成的延迟了。
参考:http://www.skywind.me/blog/archives/1145
实时动作游戏同步方式和传输协议选择 http://www.gameres.com/478430.html