有些事情,真是要等到实际做时才知道其麻烦之处,如下图:
当玩家A的侏儒女法师望着楼梯上的玩家B的精灵战士的时候(左图),玩家B控制精灵战士向前移动.在玩家A的机器上,接收到了精灵战士前移的消息后,为了保证精灵战士的动作流畅性,开始模拟控制精灵战士向前移动,导致精灵战士从楼梯上掉了下来,从而在玩家A的机器上开始转而模拟精灵战士的下落.如果网络延迟足够大,那么可能直到玩家A机器上模拟的精灵战士落地,玩家A的机器都没有收到来自玩家B的精灵战士开始下落消息.
那么,在玩家A机器上模拟的精灵战士下落过程中,收到了来自玩家B的精灵战士开始下落网络消息,该如何处理? 重新将正在下落的精灵战士拉起来再下落一次? 或者忽略掉来自玩家B的这个消息,那么后续同步该如何处理?
总体来说,处理起来很复杂,500多行的代码,我翻来覆去重写了三四次,总体达到了很满意的效果,现在人物同步方面,老婆看了都说和魔兽一样了 .