假设玩家X在服务器世界中的当前位置为上图中的节点CurPos,记为CurPos(x, y)。行走路径如上图所示,共5个节点,记为MovePath。这条路径已经经过验证,是合法的。玩家开始行走的时间记为StartMoveTime。在tick中要做的就是根据流逝的时间和这段行走路径来更新玩家的当前位置和玩家的视野。
处理流程如下:
1) 如果行走路径为空,则不做任何处理,否则继续;
2) 如果移动速度为0(可能中了某个buff),则不做任何处理,否则继续;
3) 根据移动速度和流逝的时间(当前时间与StartMoveTime想减)计算走过的路程;
4) 计算从上一个当前位置开始的行走路径上各段的和,与走过的路程对比,看现在应该走到哪里。例如:如果走过的路程等于前两段的和,则修改当前位置为节点2;如果走过的路程小于前两段的和且在节点1和节点2之间,则根据比例式计算当前位置并更新,得到新的当前位置;【注:将CurPos独立出来就是为了避免向路径头部插入一个当前位置节点而导致元素的移动】
5) 更新开始行走时间StartMoveTime为当前时间,用于下一次处理;
6) 清除行走路径上已经走过的结点(对应上面的两种情况,分别是【节点1、节点2】与【节点1】),并将这些节点保存在该玩家已经走过的路径中,用于敌人的追击路径(不寻路而直接使用这条路径追击);
7) 更新玩家的方向(8方向),以“上一个当前位置”为坐标原点,看新的当前位置落在第几象限;
8) 更新视野:(在视野中详细分析)
将这一系列的处理记为更新玩家在服务器世界中的位置。