我正在制作一个游戏,我遇到了一个很难实现到代码中的部分。我的游戏是一个基于瓷砖的平台游戏,有很多敌人在追你。基本上,理论上,我希望我的敌人能够在每一帧/秒/2 秒内找到通往我的玩家的真实最短路径。我原本以为A-star是一种解决方案,但它把敌人引向了对抗重力的路径,这并不好。此外,每秒会有多个敌人使用它来获取最新路径,然后走它的前几格。因此,他们将每秒丢弃路径的其余部分,并仅跟随路径的前几个图块。我知道这似乎很多,每秒计算一条新路径,同时,如果他们的敌人不止一个,但我不知道任何其他方式来实现我想要的。这是我想要的图片: 说明:绿色为玩家,红色为敌人。灰色的瓷砖是规则的,敞开的,没有瓷砖,棕色的瓷砖是可以站立的。最后突出显示的黄色瓷砖代表我希望我的敌人能够找到的路径,以便真实地到达玩家。所以,问题是:我可以用什么现实的寻路算法来获得这个?同时保持快速?
编辑*我更新了图片以表示他们可能是最复杂的地图。这张地图代表了我的游戏玩家实际看到的内容,他们只是使用 WASD 并且可以四处移动,他们看到自己在这个 2d 平台视图中移动。他们将是不同类型的敌人,都有不同的速度和跳跃高度。但所有人都将有足够的跳跃高度和速度来完成这张地图中的跳跃,并通过它进行机动。只需读取包含关卡数据的 XML 文件即可生成地图。然后根据 XML 的说明解析数据,并将不同类型的图块放置在图块保存精灵中。EX( XML 节点: (type="reg" 图形="grass2" x="5" y="7" ) 等 x 和 y 乘以常数 gridSize (如 30 或其他),并相应地放置它们。敌人从附在他们身上的 AI 类获得逐帧指令。这个类负责产生这条路径并将第一个方向返回给敌人,这应该每隔一秒左右发生一次,这样敌人就不会走上一条古老的错误路径。如果您理解我的概念,请告诉我,并且您有一些想法/想法,甚至可能是我正在寻找的答案。另外:这个游戏中的物理与寻路是分开的,它们工作得很好,使用 AABB 与 AABB 的概念(玩家和敌人也是 AABB)。这个类负责产生这条路径并将第一个方向返回给敌人,这应该每隔一秒左右发生一次,这样敌人就不会走上一条古老的错误路径。如果您理解我的概念,请告诉我,并且您有一些想法/想法,甚至可能是我正在寻找的答案。另外:这个游戏中的物理与寻路是分开的,它们工作得很好,使用 AABB 与 AABB 的概念(玩家和敌人也是 AABB)。这个类负责产生这条路径并将第一个方向返回给敌人,这应该每隔一秒左右发生一次,这样敌人就不会走上一条古老的错误路径。如果您理解我的概念,请告诉我,并且您有一些想法/想法,甚至可能是我正在寻找的答案。另外:这个游戏中的物理与寻路是分开的,它们工作得很好,使用 AABB 与 AABB 的概念(玩家和敌人也是 AABB)。