algorithm - 平台游戏 - 一种逼真的寻路算法

标签 algorithm actionscript-3 flash path-finding

我正在制作一款游戏,我遇到了一个很难实现到代码中的部分。我的游戏是一款平铺平台游戏,有很多敌人在追你。基本上,从理论上讲,我希望我的敌人能够在每一帧/秒/2 秒内找到到达我的玩家的真实且最短的路径。我本来想A-star是个解决办法,但它把敌人引向了反引力的道路,这不太好。此外,每秒都会有多个敌人使用它来获取最新路径,然后走它的前几 block 。所以他们每秒都会丢弃路径的其余部分,而只跟随它的前几 block 。我知道这似乎很多,每秒计算一条新路径,同时,如果他们不止一个敌人,但我不知道有什么其他方法可以实现我想要的。 这是我想要的图片:picture 说明:绿色的是玩家,红色的是敌人。灰色的瓷砖是规则的,开放的,没有瓷砖,棕色的瓷砖是你可以站在上面的。最后突出显示的黄色方 block 代表我希望我的敌人能够找到的路径,以便真实地接近玩家。 所以,问题是:我可以使用什么现实的寻路算法来获取它?同时保持快速?

编辑* 我更新了图片以代表他们可能是的最复杂的 map 。这张 map 代表了我的游戏玩家实际看到的内容,他们只使用 WASD 并且可以四处移动,他们看到自己在这个 2d 平台 View 中移动。他们将是不同类型的敌人,都有不同的速度和跳跃高度。但所有人都将有足够的跳跃高度和速度来在这张 map 上跳跃,并通过它进行机动。 map 是通过简单地读取其中包含关卡数据的 XML 文件生成的。然后根据 XML 的内容解析数据并将不同类型的图 block 放置在图 block 持有 Sprite 中。 EX( XML node: (type="reg"graphic="grass2"x="5"y="7") 所以 x 和 y 乘以常量 gridSize(比如 30 或其他),然后它们被放置下来相应地。敌人从附属于他们的 AI 类中获得逐帧指令。这个类负责生成这条路径并将第一个方向返回给敌人,这应该每隔一秒左右发生一次,以便敌人不要走老的、错误的路。如果你理解我的概念,请告诉我,你有一些想法/想法,甚至可能是我正在寻找的答案。 另外:这个游戏中的物理与寻路是分开的,它们工作得很好,使用 AABB vs AABB 概念(玩家和敌人也是 AABB)。

最佳答案

此处使用 A* 的技巧在于如何将图 block 链接在一起以形成可用路径。以红色玩家需要跨越的第一个缺口为例。到下一个平台的“链接”(也就是左边的棕色瓷砖)实际上是一个跳跃 Action ,而不是移动 Action 。此外,由您决定节点如何连接在一起;当从灰色瓷砖移到棕色瓷砖上到灰色瓷砖时,我会增加一个严重的惩罚,而下面没有任何东西只是为了初学者(不阻止打开快捷方式的跳跃)。

我个人看到了两条路线:快速预测玩家可以跳多远以及他们会跳到哪里,并调整算法如何确定节点邻接或接受路径并确定部分路径何时“挂起”在空中(下面没有棕色瓷砖)并让敌人“跳”到路径的下一部分。诀窍是当敌人可能穿过棕色瓷砖时处理事情,即使路径不是抛物线。

我不精通这两种解决方案;只是我考虑过的事情。

关于algorithm - 平台游戏 - 一种逼真的寻路算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19040359/

相关文章:

构造循环基础的算法,条件是每条边必须最多被 2 个循环共享

flash - 使用 OpenFL 将 Haxe Flash 应用程序编译到 Adob​​e AIR

java - 在基于浏览器的游戏中创建 UDP 和 TCP 连接?

c++ - 使用 Adob​​e Alchemy 的 libFLAC 移植问题

javascript - SWF 不在 IE9 中呈现(但在 Chrome/FF 中呈现)

c# - 最大化网格中缩略图的大小

algorithm - 产生长的 MD5 或 SHA1 散列码(64 位)

algorithm - 最小化涉及单个项目的最大比较次数的排序算法

javascript - 如何使用 javascript/AS3 更新加载的 SWF 文件中的文本?

actionscript-3 - 如何从 ActionScript 文件生成 SWF 文件?