我有一辆车,当加速时希望速度可以“缓慢”增加。
通过查看几个网站,我得出结论:可以使用SmoothStep方法来实现这一点?
我基本上知道如何移动纹理等内容,因此一个使用SmoothStep将值在float中逐渐增加的示例将非常有帮助!
提前感谢您的帮助 :)
我认为MSDN库中并没有所有方法的示例,这很遗憾。
我有一辆车,当加速时希望速度可以“缓慢”增加。
通过查看几个网站,我得出结论:可以使用SmoothStep方法来实现这一点?
我基本上知道如何移动纹理等内容,因此一个使用SmoothStep将值在float中逐渐增加的示例将非常有帮助!
提前感谢您的帮助 :)
我认为MSDN库中并没有所有方法的示例,这很遗憾。
SmoothStep在这里不会帮助你。 SmoothStep是一个两个值的插值函数,类似于正弦插值。它会缓慢加速,在x = 0.5左右达到高速度,然后减速直到到达终点(x = 1.0)。
就像下面这样:
这只是近似值,实际函数没有这些精确数字。
是的,你可以使用x = 0..0.5来实现你想要的效果,但是对于加速曲线,你的控制非常有限。
如果你想真正地加速汽车或任何其他对象,最好自行跟踪加速度和速度。
class Car : GameComponent
{
public override void Update(GameTime time)
{
velocity += acceleration * time.ElapsedGameTime.TotalSeconds;
position += velocity * time.ElapsedGameTime.TotalSeconds;
}
Vector3 position;
Vector3 velocity;
Vector3 acceleration;
}
如果你的游戏状态使用的维度不同,那么位置、速度和加速度将是Vector2或Vector3。此外,请注意这种积分形式容易出现轻微的数学误差。
float speed = MathHelper.SmoothStep(0, destSpeed, f/destSpeed);
这份文档真的太糟糕了,让人难以置信。
我在此期间发现了一个非常有用的网站。 http://johnnygizmo.blogspot.com/2008/10/xna-series-basic-ai.html