视线范围,球员位置更新

时间:2012-06-02 16:02:23

标签: c# synchronization multiplayer

我正在为一个多人RPG编码服务器,而我正在努力实现视距。由于一些地图相当大,我必须限制客户看到的内容。我的方法:

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

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

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

2 个答案:

答案 0 :(得分:0)

Eric Lippert had a really good series of posts on shadowcasting可能有助于解决/解决此问题。

答案 1 :(得分:0)

您可能需要考虑使用quadtrees将游戏世界划分为基于玩家角色可以看到的区域的部分。然后你不需要一直循环游戏中的每个生物;你只需要在有问题的玩家角色所在的部分内循环,以及任何相邻的部分越过界限。

我自己并没有亲自进行过这种编码,但是我确实与那些在我正在开发GUI的太空战游戏中做过这种编码的人一起工作!