视线范围,玩家位置更新

本文关键字:位置 更新 玩家 范围 视线 | 更新日期: 2023-09-27 18:36:10

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

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

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

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

视线范围,玩家位置更新

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

您可能需要考虑使用四叉树根据玩家角色可以看到的区域将游戏世界拆分为多个部分。然后,您无需一直循环访问游戏中的每个生物;您只需要循环访问相关玩家角色所在的部分中的那些,以及任何相邻的那些,以防某些东西越过边界。

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