【发布时间】:2019-02-20 17:33:55
【问题描述】:
场景:大量玩家在 3d 空间中玩实时游戏,必须以一种服务器可以有效地更新其他玩家和玩家移动和动作的任何其他观察者的方式进行组织。在模拟中,需要根据它们彼此之间的范围来挑选哪些对象相互“交谈”;这是为了保持网络的健全性、程序员的健全性,并且还允许 server-let 处理整个世界游戏空间的较小块。
但是,如果你有 3000 名玩家,这就遇到了必须运行 3000 名的问题!计算找出一切之间的范围。 (Google 告诉我,这最终是一个超过 9000 位的数字;这太疯狂了,不值得考虑用于近实时环境。)
Daybreak Games似乎通过他们的大型在线第一人称射击游戏 Planetside 2 解决了这个问题;它允许 3000 名玩家在共享空间上玩游戏并具有实时响应能力。他们显然是通过“球体树”数据结构完成的。
但是,我不肯定这是他们使用的解决方案,我仍然在质疑如何应用“球体树”的概念来将剔除的范围计算减少到合理的数额。
如果球形树不是适合吠叫的树,我还应该注意什么来解决这个问题?
(我是一名 c# 程序员(主要是),但我正在寻找一个合乎逻辑的答案,而不是代码)
我找到的关于球体树的参考资料;
http://isg.cs.tcd.ie/spheretree/#algorithms
https://books.google.com/books?id=1-NfBElV97IC&pg=PA385&lpg=PA385#v=onepage&q&f=false
【问题讨论】:
标签: data-structures tree logic