我正在用Python开发一个实时等角RPG游戏,并希望将其作为移动设备的平台。 我遇到困难的主要领域是路径规划。 我尝试了一些算法,包括A *和一些调整来更好地适应我的地图。
我对我的算法结果感到满意-它们在给人以智能幻觉的同时是确定性的,并且在两个角色互相定位的情况下始终具有一致性,以便它们会在中间碰撞。
问题在于,虽然在我有足够处理能力的PC上结果看起来不错,但在我的手机上却完全不同,并且往往需要一两秒钟的延迟来计算算法。因此,我正在考虑编写一个库,其中最耗费性能的代码用C编写,但如果有现成的解决方案或更好的方法,我愿意倾听。
我偶然发现了python-pathfinding,但这似乎比我自己为自己的用例构建的还要慢。
我的使用情况:
我的地图是由关卡构建而成的,每个关卡都由墙壁(可见或不可见)包围,并且必须通过门(可见或不可见)连接。
我目前的方法是使用两种不同的算法:
在一个房间内,我将每个方块作为节点进行搜索,边缘作为相等成本的边缘,并以朝向目标地点的深度优先方式搜索。
在房间之间,每扇门都是一个节点。 使用第一个算法计算通过房间的最短可能路径(从门到门),并将其存储在哈希表中作为这些节点之间的边缘成本。 计算可以从一个节点到另一个节点遍历的边缘集,并将其存储在哈希表中,不允许在同一路径中多次包含相同的边缘。
我在启动时生成一个独立的进程,使用第一算法生成第二算法所需的图表,这解决了我的许多问题,因为房间往往相对较小,因此即时路径查找的惩罚保持较低,然后针对较长距离:
- 使用第一算法计算当前位置到当前房间每扇门的距离。
- 使用第一算法计算目标房间每扇门到目标位置的距离。
- 使用第二个算法的输出来获取房间之间的路径集合
- 将这些路径的成本加到到达第一扇门和最后一扇门的成本中
- 按成本排序解决方案的集合,使得相同成本的路径顺序始终一致
- 选择解决方案集合中的第一个项目。