我正在努力在我的OpenGL Android项目中实现转向行为,但是我很难理解为什么我的Arrive行为代码表现得不像它应该的那样。
在更新循环期间,我的程序计算转向力,用于更新移动代理的位置。目前,它的行为与“Seek”行为完全相同,因为它移动到Targetpos中定义的位置,但是当它接近它应该的点时,它不会减速和停止,而是一直向前移动并反复超越目标再次。
对此的任何帮助将不胜感激,下面是代码应该为代理返回适当的转向力。
减速只是1-3编码不同速率的枚举,代理应该减速。
private Vector2 Arrive(Vector2 Targetpos, Deceleration deceleration) {
Vector2 ToTarget = sub(Targetpos, agentPos);
//calculate the distance to the target
float dist = ToTarget.len();
if (dist > 0.2f) {
final float DecelerationTweaker = 0.3f;
//calculate the speed required to reach the target given the desired
//deceleration
float speed = dist / ((float) deceleration.value() * DecelerationTweaker);
//make sure the velocity does not exceed the max
speed = Math.min(speed, agentMaxSpeed);
Vector2 DesiredVelocity = mul(ToTarget, speed / dist);
return sub(DesiredVelocity, agentVelocity);
}
return new Vector2(0, 0);
}