【问题标题】:A* Algorithm 2D Game Pathing issuesA* 算法 2D 游戏路径问题
【发布时间】:2015-04-20 13:41:22
【问题描述】:

我决定从以前开始使用我的旧 2D 游戏引擎并继续开发它这是我第一次尝试为敌人实现一些基本的 AI,但我遇到了一些问题。以下是我如何为敌人处理 AI。

  • 如果玩家在敌人的一定范围内,敌人会向玩家移动,只需检查他是在玩家的上还是下、左还是右,并相应地调整它的坐标。

  • 如果敌人撞到阻碍他向玩家方向移动的障碍物,那么我调用 My A* 算法来检测到玩家的最短路径并绕过障碍物移动。

  • 我正在检查敌人是否不再每帧都被阻挡,然后是否再次调用 A* 算法来调整玩家的移动位置。

我实现 A* 的方式是根据敌人的尺寸检查相邻的方格。因此,例如,如果我有一个 60X60 的敌人,我将检查这些维度内的相邻图块,敌人也可以是不同大小的。我遇到的问题如下:


假设敌人是黑色方块。它检查它的相邻瓷砖并可以移动到它前面的方块,因为它没有与这个方块中的任何物体发生碰撞。一旦它在顶部正方形中,它也可以在不发生碰撞的情况下穿过正确的正方形。现在针对这种情况:


假设当敌人在黑盒子的位置时调用A*算法。现在因为没有敌人在顶墙之间移动所需的大小,所以会发生碰撞,根据我的算法,这将导致敌人忽略这个块。


所以我的问题是,解决这个问题的最常见方法是什么。我可能缺少一些愚蠢的东西,但我想我会问。我希望我已经解释了我遇到的问题,如果您需要任何澄清,请询问。提前致谢。

【问题讨论】:

  • 我个人不明白问题出在哪里,但是,我认为您使用算法的方式可能会导致奇怪的行为,因为您仅在遇到障碍物时才使用它,想象一下垂直管, 敌人在上面,他试图到达管子下面的玩家,敌人会因为他还没有碰到任何障碍物而下降,当他到达管子的底部时,这是一个障碍物,然后算法将计算将要向后走的路径(上管),但是一旦他上去,就没有障碍物,他会再次向下。如果我错了告诉我

标签: algorithm 2d monogame tile


【解决方案1】:

我假设你用敌人大小的方块填充 A*

这是错误的,你需要按单个单元格/像素喂什么

所以在填充时填充相邻行(不是整个框)

如果没有释放整行,则根本不要填充它

您需要将一些附加信息编码到 A* 映射中,例如:

  • 它是水平、垂直或两条线
  • 如果是角落或盒子位置

知道你可以成长的方式

[备注]

A* 填充应始终与您的运动能力相匹配

【讨论】:

  • 谢谢先生。这很有帮助,我能够通过在计算每个点后将敌人捕捉到最近的可用瓷砖来解决我的问题。
  • @DavidSleep 很高兴为您提供帮助
猜你喜欢
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2012-01-01
  • 1970-01-01
相关资源
最近更新 更多