我正在尝试实现转向行为,但我遇到了“包括”计算中的通过时间然后允许我控制游戏速度的问题。我已经看到了各种转向行为的来源,我已经想出了这个(到达行为):
var toTarget:Vector2D = new Vector2D( mEntity.targetPosition.x, mEntity.targetPosition.y );
toTarget.subtract( mEntity.position );
var dist:Number = toTarget.length;
toTarget.normalize().scale( mEntity.maxSpeed );
if( dist < slowDownDist ) {
toTarget.scale( dist / slowDownDist );
}
return toTarget.subtract( mEntity.velocity );
这是MovingEntity的 advanceTime 方法:
var steeringForce:Vector2D = mSteering.calculate();
steeringForce.x /= mMass;
steeringForce.y /= mMass;
steeringForce.scale( time );
mVelocity.x += steeringForce.x;
mVelocity.y += steeringForce.y;
x += mVelocity.x * time;
y += mVelocity.y * time;
转向力应该(在某一点上)与实体的速度直接相反,从而使其停止。我看到和不明白的问题是,为了模拟加速度,力需要除以质量,并考虑需要乘以该时间的通过时间 - 但这会使转向力大幅度下降并导致实体超过目标点而不是停在那里然后它返回,这有效地引起振荡。如果我不将力与时间相乘,则移动实体的行为会略有不同,具体取决于游戏速度。
答案 0 :(得分:1)
按第二个(?)牛顿定律 F = m * a
F
为力,m
为质量,a
为加速度。力以牛顿为单位,质量以千克为单位,加速度以米/秒每秒为单位。所以,你只需要施加更大的力,并按原样计算。