【发布时间】:2012-04-24 15:38:51
【问题描述】:
我正在尝试用 Javascript 创建一个塔防游戏。
除了寻路,一切都很顺利。
我正在使用来自该网站的 astar 代码:http://www.briangrinstead.com/blog/astar-search-algorithm-in-javascript,它使用二进制堆(我认为这是相当最佳的)
我遇到的问题是我想让人们阻止“攻击者”的路径。这意味着每个“攻击者”都需要能够自己找到通往出口的路(因为有人可以切断一个“攻击者”并且它需要自己找到通往出口的路)。现在 5/6 攻击者可以在任何时候毫无问题地寻路。但是假设路径被 10 多个攻击者阻止,所有 10 个攻击者都需要同时触发其寻路脚本,这只会将 FPS 降低到大约每秒 1/2。
对于任何时候都有很多实体寻路的人来说,这一定是一个常见的问题,所以我想一定有比我的方法更好的方法。
所以我的问题是:以最有效的方式对多个“机器人”实施大规模寻路算法的最佳方法是什么。
谢谢,
詹姆斯
【问题讨论】:
-
看起来该代码中的
findGraphNode需要线性时间,而它应该需要恒定时间(使用哈希表),因此实现远非最佳。 -
我看看能不能加快一点速度。但是我认为即使使用更有效的路径查找,如果我尝试对机器人进行路径查找,我仍然会以缓慢的帧速率结束。我开始认为我最好的选择实际上是每帧对整个地图进行一次路径查找,然后设置一个方向在机器人跟随的每个可通过的块上..
-
@james 如果这与大多数塔防类似,大约有一个屏幕的地图,没有复杂的碰撞(即机器人不会相互碰撞或其他移动物体,或者你单独处理这个) ) 那么是的,我认为计算整个地图的路径是最好的。事实上,您甚至可能不必每帧都重新计算整个地图。如果您在构建算法时小心翼翼,您应该能够确定哪些节点受到用户更改的影响,并仅从这些节点重新计算“上游”。听起来很有趣!
-
@james 您或许可以使用 Dijkstra 的算法作为一个粗略的起点。作为旁注,算法寻路可能有点无聊并且(取决于游戏)不切实际。您可能会考虑替代方案,例如转向行为,它们不仅速度快,而且不能保证完美的路径。如果做得正确,这可以给你的机器人更多的“生命”,但这是否可取取决于你。
标签: javascript html path-finding a-star