我正在改编80年代Java中的经典Boids模拟。它运作良好,但我试图为行为添加一个新规则,强制代理避免矩形(墙),我不知道如何去做。
我见过这个帖子:
https://gamedev.stackexchange.com/questions/45381/wall-avoidance-steering
但是我对最终代码中使用的语法(如partsList [j] - > normal)感到困惑,以及如何获取代理和矩形之间的距离,以及如何实际驱动代理。这个公式虽然有意义。有人可以向我解释一下吗?非常感谢你!
P.S。我一直关注this伪代码,我还使用this Java源代码作为参考。
编辑:好的,我明白为什么我对语法感到困惑,但在撰写墙避免规则时,我仍处于黑暗中。
答案 0 :(得分:0)
啊,我记得80年代,和的boids模拟......
通常在类似于boids steering behaviors中,我们的想法是对行动者的速度(动量)施加行为“转向力”。因此,实现任何给定的转向行为都归结为找到一些几何结构,该结构生成指向您想要转向的矢量。理想情况下,这些是切向转向力(垂直于当前速度),因此转向与速度控制无关。
在避开墙壁的情况下 - 矩形可以被认为是四面墙 - 一般的想法是采用指向远离(垂直于)墙壁的矢量。使用投影(点积),您可以分离出平行于和垂直于速度矢量的力的分量。垂直于药剂速度的壁法线分量是一种转向力,可以使药剂远离墙壁。
另一方面是知道何时使用这种避免墙的行为。一个有用的方法是选择一个时间范围,比如2秒,并确定代理是否会在该时间内撞到墙上。使用当前位置,速度和时间值,您可以在2秒内对代理的位置进行简单的线性预测。如果它在那个时间间隔内穿过墙壁,则它应该使用它的墙壁避让行为。
有关详细信息,请在GDC 99 paper中查找“遏制”,和/或查看以下内容: http://natureofcode.com/book/chapter-6-autonomous-agents/ https://gamedevelopment.tutsplus.com/series/understanding-steering-behaviors--gamedev-12732