XNA – 绕墙行驶

在我的一个俯视视角、逃离可怕外星人的游戏中,使用C# XNA编程,我设置了一些外星人和墙壁(以及其他元素)。我现在遇到的一个难题是如何让外星人绕过墙壁行驶。目前他们像傻瓜一样撞到墙上,沿着墙滑动,可能会在另一边探出时到达目标。

这是我对问题的专业插图:问题 http://imageshack.com/a/img829/6545/wsf4.jpg

所以,我的直接问题是:

  1. 如何检查外星人和目标之间是否有墙?
  2. 如何引导它们沿着最短路径绕行?

欢迎提供算法/解释,C# 代码将是额外的奖励!:)

为了简化计算,这里有一些相同的假设:- 外星人和墙壁都有AABB – 墙壁总是垂直或水平的

如果需要,我很乐意提供任何额外的信息:)


回答:

在研究开发wp7/wp8游戏时,我通过A*路径查找算法解决了这种问题。(www.policyalmanac.org/games/aStarTutorial.htm)。

你也可以使用Dijkstra算法进行路径查找。https://i.sstatic.net/VMkdl.gif

这是我的第一种方法。后来我了解到另一种方法。这种方法建立在A*路径查找的基础上,并利用了AI引导力/行为。你甚至可能只用引导力就能解决这个问题。

简单来说,引导力根据目标和环境迫使实体移动。你将移动(速度)力叠加到实体上,这些力的总和以期望的方式移动实体。

因此,一个实体可能有移动欲望靠近怪物,避开墙壁,以及避开地图边界。这些速度乘以百分比值(你希望它们对全局力施加多少)全部加在一起,就得到了最终的力。

这些方法各自都有问题和限制。我认为A*和引导力的组合可能是你最好的选择。

示例:https://i.sstatic.net/u7ECs.jpg

编辑:如果想要手动放置节点,Dijkstra算法更基于节点。如果放置节点不是一个选项,我认为引导力是你最好的选择。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注