【问题标题】:XNA - Steering around wallsXNA - 绕墙转向
【发布时间】:2014-04-03 14:31:27
【问题描述】:

在我用 C# XNA 编程的自上而下的小外星人游戏中,我有一些外星人和一些墙(以及其他东西)。我无法弄清楚如何引导外星人绕过墙壁。此刻他们像白痴一样撞上他们,滑行,如果他们戳到另一边,可能会到达目标。

这是我对这个问题的专业说明: problem http://imageshack.com/a/img829/6545/wsf4.jpg

那么直接,我的问题是:

  1. 如何检查外星人和目标之间是否有墙?
  2. 我如何引导它们沿着最短的路线四处走动?

欢迎算法/解释,c# 加分! :)

一些相同的假设有望使计算更容易: - 外星人和墙壁有AABB - 墙壁总是垂直或水平的

如有必要,我很乐意提供任何其他信息:)

【问题讨论】:

  • 搜索“A* pathfinding unity”。当我在 Google 中输入它时,第一个结果似乎很有希望。
  • @ChrisDunaway 我的游戏是连续的,不是基于网格的。这个解决方案是否意味着我必须为了算法而在我的世界上建立一个网格?如果是这样,我可以简单地将vector2的坐标用作精细网格吗?如果不是,网格应该有多宽?
  • 您可以在您想转弯的地方定义自己的航点(许多大型游戏使用区域而不是点)。使用 A* 算法,您将连接点/区域以为您的玩家创建路径。您可以通过检查您是否真的与原始直线路径中的墙壁发生碰撞来拆分 A* 路径查找和常规移动之间的功能(我没有这样做,但我建议“光线跟踪”)。因此,如果您检测到从玩家位置到目标位置的碰撞,请使用 A* 找到最佳路径,否则您只需朝该位置走。
  • 您可以通过检查障碍物的碰撞来制作自己的,但您的敌人可能会被困在“U”形障碍物内。所以唯一的解决方案是 A* 路径...这里是 XNA 的一些示例:stevephillips.me/blog/implementing-pathfinding-algorithm-xna

标签: c# xna artificial-intelligence rectangles collision


【解决方案1】:

当我对自己开发的 wp7/wp8 游戏进行研究时,我通过 A* 寻路解决了这类问题。 (www.policyalmanac.org/games/aStarTutorial.htm)。

您还可以使用 Dijkstra 算法进行寻路。 http://i.stack.imgur.com/VMkdl.gif

这是我的第一个方法。从那以后,我学会了一种不同的方法来处理它。这建立在 A* 寻路的基础上,并利用 AI 转向力/行为。您甚至可以主要通过转向力来解决这个问题。

简单地说,操纵力迫使实体根据其目标和环境移动。您将运动(速度)力叠加到实体上,这些力的总和以所需的方式移动实体。

因此,一个实体可能有移动欲望,向你的怪物移动,避开墙壁,避开地图边界。这些速度乘以 % 值(您希望它们应用到全局力的程度)全部加起来就是最终的力。

所有这些都存在问题和限制。我认为 A* 和转向力的组合可能最适合您。

示例:http://i.stack.imgur.com/u7ECs.jpg'

编辑:如果您想手动放置节点,Dijkstra 更基于节点。如果放置节点不是一种选择,我相信转向力是你最好的选择。

【讨论】:

  • 哈哈!我记得 dij-cantpronounceit-ra 在决策数学中的算法。那是轻松的日子......所以听起来我需要到处都有节点来支持我使用的任何算法。我可以想象 dij-cantpronounceit-ra 的算法会是什么样子,所以我可以选择它。谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 2014-04-01
相关资源
最近更新 更多