通恒大厦招聘:关于 MMORPG 中的障碍判断

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 14:16:16
关于 MMORPG 中的障碍判断 来源: [ OGDEV ] 浏览: [1566]   地图的固定障碍不在本文的讨论范围以内,针对人物障碍来讨论。

不论 2d 还是 3d 的 mmorpg 中,寻路都是基于 tile 结构的。我们从 90 度顶视角来看,就会有下图那样的地图格子。

一、人物是障碍

人物是障碍,所带来的最大的一个担忧就是害怕玩家会堵路口。另外呢,移动的障碍会造成很多寻路中需要实时判断的事情,从而造成服务器的工作增加。

来看图解释一下,这种移动障碍的内部机制。

1. 玩家移动





(图 1 )

甲站在格子( 2,4 )上,他要去( 4,4 ),玩家看到他的角色先移动到( 3,4 ),然后到( 4,4 )。而实际上,先移动的是障碍标记。障碍比角色先移动,也就是先占住自己要移动的格子,

2. 绕过玩家障碍




(图 2 )

甲站在格子( 2,4 )上,他是障碍;玩家乙站在( 2,2 )上,他要去( 2,5 ),他选择的路线就是( 2,3 )( 3,4 )( 2,5 ),从而绕过甲。

3. 两玩家同时向一点移动



甲站在格子( 2,4 )上,乙站在( 2,2 )上,他们俩同时向( 4,3 )移动,此时( 4,3 )并没有障碍,因此两人都被允许移动。程序里的消息是成队列发送的,所以并没有“同时”这个情况发生,总会有一个人先到,而我们从“ 1. 玩家移动”中可以知道,障碍是先移动的。我们假定甲的网速比较快,因此甲的障碍先达到目标点。而后,乙发现目标点已经有障碍的,于是就停在距离目标点最近的那个格子上。

4. 两玩家交叉通过


甲在( 2,4 ),向( 6,4 )移动;乙在( 4,2 ),向( 4,6 )移动。他们的路径在( 4,4 )交汇。假设甲先到达( 4,4 ),那么乙发现前面有障碍,就会向( 5,4 )移动,而甲则转向( 5,3 ),两人各自寻路交叉通过。(实线为甲的路径,虚线为乙的路径)

二、人物不是障碍

人物不是障碍就实在很简单喽,游戏中就出现“穿人”的现象。在这种情况下,未了避免玩家重叠在一个格子里,会加入一个位置重叠判断,一旦发现自己站立的格子已经存在另一个玩家,就会选择目标点周围最近的一个可站立点移动过去。


在客户端寻路的模式下,要做玩家角色是障碍就很麻烦了,因为如果实时传递这种障碍信息,还不如将寻路放在服务器端呢。所以,在客户端寻路的模式下,设定一个玩家站立的时间(比如 300 毫秒),只有在玩家站立达到这个时间的条件下,就会把他标志成为障碍,而其他玩家才会绕过他移动。