1

我正在为多人 RPG 编写服务器,目前正在努力实现视线范围。由于有些地图相当大,我必须限制客户看到的内容。我的做法:

如果我从客户端获得新坐标,我会将它们保存为目的地,以及移动开始时间。每隔 x 毫秒,我会遍历世界上的所有生物,并在保存它们上次更新它们时的位置后更新它们的当前位置。基本上,我根据移动开始时间和速度计算新位置,并将它们写入当前位置变量,同时保存新的开始时间。更新完成后,我将检查所有移动的生物,也就是那些位置与上次更新不同的生物。在一个子循环中,我再次遍历所有生物/客户,以检查我是否必须通知他们有关(消失)出现的生物。目前,我每 100 毫秒运行一次此更新。

这种方法很有效,但我觉得这不是最好的方法。而且我不确定一旦世界上有几千个生物(玩家、怪物等)会发生什么,这些生物必须更新和检查。

由于我无法找到有关此特定问题的资源,因此我在这里询问。这种方法好吗?我会很快遇到问题吗?这样做的标准是什么?最好的方法是什么?

4

2 回答 2

0

Eric Lippert 有一系列关于阴影投射的非常好的帖子,可能有助于解决/解决这个问题。

于 2012-06-02T16:18:20.637 回答
0

您可能需要考虑使用四叉树根据玩家角色可以看到的区域将游戏世界划分为多个部分。这样你就不需要一直循环遍历游戏中的每个生物;您只需要遍历有问题的玩家角色所在的部分中的那些,以及任何相邻的,以防有东西越过边界。

我自己并没有亲自编写过这种编码,但我确实与在我正在为其开发 GUI 的太空战斗游戏中这样做的人合作过!

于 2012-06-02T16:23:41.580 回答