如何在大型网络世界中处理实体寻路和运动?


12

在此处输入图片说明考虑到上面的图像将瓷砖分成32x32的框,我有一个实体被标记为“ aggro”附近的玩家。我希望这个怪物理想地追逐玩家(并继续追逐玩家一段时间)。目前,我的唯一动作是使用一个用于远程实体的简单插补器完成的,这是可行的,因为动作更新之间的差距很小。

我不能成功地仅仅告诉客户怪物想要移动到他/她所处的位置,因为这将导致实体移动得比其应该快得多(这可以通过对插值函数使用一些数学运算来解决) -有效),但更重要的是,它看起来不太现实,可能会夹住墙壁!如果可以避免,我不想在服务器上模拟整个运动……虽然我想我可以,但是仍然不能解决裁剪问题。我怀疑该解决方案涉及一些寻路,并向客户端发送定期的节点更新,并让它们模拟运动,但是我不确定。

谢谢!

Answers:


9

对于简单的开始,您可以实现转向行为。明确寻求行为在此处输入图片说明

除了寻找角色外,还应避免使用躲避障碍物

在此处输入图片说明

一旦这些方面起作用,您就可以实施一些更明智的跟踪。这将包括寻找路径。现在,敌人不再转向敌人,而是转向引导他们到达目标的路径上的每个节点

一旦敌人“足够接近”,您就可以完全转向操纵行为。由于它们比寻路便宜,因此您可以获得近距离范围内的出色结果。

转向还将使您能够定义最大转弯速度和敌人的最大速度。

可以在客户端上通过服务器的定期更新来管理转向,以确保它们仍在正确的轨道上。


这是否也意味着在服务器上模拟操纵行为,还是可以逻辑上沿路径“捕捉”实体?我不需要太大的要求。
旺市(Vaughan Hilts)2013年

单独的转向将必须被模拟(虽然不是很沉重)。但是,无需模拟即可更新指向航点的方向。只需确保客户位于“当前”航路点的范围内,并转向正确的航路点作为其“下一个”路口即可。如果实体偏离轨道并突然更新,这将涉及一些捕捉。
MichaelHouse

+1为好答案。感谢您节省我的几个小时。
Md Mahbubur Ra​​hman 2013年

1

我不能成功地仅仅告诉客户怪物想要移动到他/她所处的位置,因为这将导致实体移动得比其应该快得多(这可以通过对插值函数使用一些数学运算来解决) -有效)

实际上,这很简单。运动方向将是目标位置减去当前位置。您需要做的就是将矢量缩小到您实际想要的移动速度。重复每一帧。

但更重要的是,它看起来不太现实,可能会夹住墙壁!我不想在服务器上模拟整个运动,如果可以避免的话...

您需要模拟服务器上的移动。您还怎么知道所有玩家都看到相同的行为?

您将需要一些基本的寻路。A *为标准。您可以计算出到目标的路径,然后遵循该路径只是设置上述运动矢量的一种情况。(或者,您可以像Byte56的答案中那样使用操纵行为,本质上是相同的东西,但有一些附加功能。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.