四处移动/避免障碍


12

我想写一个“游戏”,在其中可以放置一个障碍物(红色),然后黑点尝试避开它,并到达绿色目标。
我正在使用一种非常简单的方法来避免这种情况,如果黑点接近红色,它会改变方向,移动一会儿,然后向前移动到绿点。
“不切实际”的道路

如何为计算机控制的“玩家”创建“平滑”路径?
编辑:不是光滑度是主要重点,而是要避免红色阻塞“墙”,而不是撞向它,然后再避免它。

如果我只有3分,我该如何实施某种寻路算法?
(如果您可以设置多个障碍,这会使事情变得更加复杂吗?)
平滑路径

Answers:


9

一种非常普遍的通用方法是将您的世界空间划分为网格并使用A *之类的算法。

链接帮助我开始理解和实现A *算法。

编辑

我想到的一个更简单的想法是……一旦您将世界置入网格单元中。始终让黑点跟随曼哈顿到绿点的距离。然后,您可以为每个单元分配权重。障碍物在栅格单元上的重量可能很高,自由移动的重量(可以说是0)。沿着曼哈顿距离移动时,对于每次移动,请检查下一个单元格的权重是否不高于当前单元格的权重。如果它更高,请检查相邻单元的重量,然后继续前进。

希望这可以帮助


这篇A *算法文章似乎正是我想要的,但是不幸的是,我仍然不知道如何将“世界”划分为网格:S
用户

真的要看 思考:将您的世界划分为32 x 32的网格,然后将其表示为2D阵列中的位置。例如,在您的情况下:红点为120、120像素(或120/32 x 120/32:3.75 x 3.75)3.75 x 3.75表示您在世界网格(或2D阵列)上的位置。由于数组由整数索引,因此只需要整数部分。因此,红点为3 x3。希望这会有所帮助
brainydexter 2011年

18

转向行为是针对此确切问题集而设计的。

http://www.red3d.com/cwr/steer/

基本上,您会将避障行为与可能的寻求或追求行为结合在一起。该页面上有许多不同行为及其作用的Java动画。有几种转向行为的开源实现。 这是一个


转向行为对此非常合适。
tenpn 2011年

2

一个简单的尝试是在黑点之前有一个不可见的点,并在第一个图像中执行该路径。然后,黑点在不可见的点后面跟随一小段距离。
我看过这项工作取得了不错的效果,但是当然可能无法满足您的需求。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.