所以基本上我编写了一个 A* 探路者,它可以找到穿过障碍物的路径并进行诊断。我基本上将http://www.policyalmanac.org/games/aStarTutorial.htm中的伪代码实现为真实代码,并使用二进制堆方法从 openlist 添加和删除项目。
使用二叉堆可以显着提升性能,比我之前使用的插入排序算法快大约 500 倍。
问题是它仍然平均需要大约 150 万纳秒,大约是 0.0015 秒。
所以问题是,我的计划是制作一个塔防游戏,每次我在地图上添加一个塔时,每个暴徒的寻路都需要更新。如果我在地图上最多有大约 50 个小怪,这意味着更新整个小怪的所有路径大约需要 0.0015 * 50 = 0.075 秒。游戏基本上每 1/60 秒(即 0.016 秒)打勾(所有游戏内容更新),所以问题是更新路径的时间比打勾的时间长,这将导致巨大的延迟。那么我该怎么做呢?我是否需要找到一种更好的算法来对 openlist 进行排序,或者以某种方式划分寻路任务,以便每个刻度仅执行 X 个寻路任务,而不是所有任务。