0

我正在改编 80 年代 Java 中的经典 Boids 模拟。它工作得很好,但我试图在行为中添加一个新规则,迫使代理避开矩形(墙),我不知道该怎么做。

我看过这个线程:

https://gamedev.stackexchange.com/questions/45381/wall-avoidance-steering

但是我对最终代码中使用的语法(如partsList [j] -> normal)以及如何获得代理和矩形之间的距离以及如何实际驱走代理感到困惑。不过这个公式是有道理的。有人可以向我解释一下吗?非常感谢!

PS 我一直在关注这个伪代码,我也使用了这个Java 源代码作为参考。

编辑:好的,我明白为什么我对语法感到困惑,但是在编写墙壁避免规则时我仍然一无所知。

4

1 回答 1

2

啊,我记得80年代,还有boids模拟……</p>

通常,在类似 boids 的转向行为中,想法是针对代理的速度(动量)施加行为“转向力”。因此,实现任何给定的转向行为归结为找到一些几何构造,该构造生成指向您想要转向的方向的矢量。理想情况下,这些将是切向转向力(垂直于当前速度),因此转向独立于速度控制。

在避免一堵墙的情况下——一个矩形可以被认为是四堵墙——一般的想法是取一个指向远离(垂直于)墙的向量。使用投影(点积),您可以分离出与速度矢量平行垂直的力分量。垂直于代理速度的壁法线分量是一个转向力,它将使代理远离墙壁。

另一方面是知道何时使用这种墙避免行为。一个有用的方法是选择一个时间范围,比如 2 秒,并决定代理是否会在这段时间内碰壁。使用当前位置、速度和该时间值,您可以对代理在 2 秒内的位置进行简单的线性预测。如果它在这段时间内穿过墙壁,那么它应该使用它的墙壁回避行为。

有关更多信息,请查看GDC 99 论文中的“遏制” ,和/或查看以下内容:http: //natureofcode.com/book/chapter-6-autonomous-agents/ https://gamedevelopment.tutsplus.com/系列/理解转向行为--gamedev-12732

于 2018-05-07T02:23:28.180 回答