XNA MathHelper.SmoothStep?它是如何工作的?

时间:2009-02-26 13:09:30

标签: c# xna

我有一辆车,加速时我希望速度“慢慢”增加..

在查看了几个网站后,我得出结论可以使用SmoothStep方法来做到这一点?

我几乎知道如何移动纹理和东西,所以使用smoothstep来增加浮点数或类似值的示例,将非常有用!

提前致谢:)

我觉得很遗憾MSDN库中的所有方法都没有示例。

3 个答案:

答案 0 :(得分:12)

SmoothStep在这里不会帮到你。 SmoothStep是一个双值插值函数。它做了类似于正弦插值的事情。它将在x = 0.5附近缓慢加速,然后减速到达(x = 1.0)。

如下所示:

smoothstep_approx

这是近似值,实际函数没有这些确切的数字。

是的,您可以使用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,具体取决于您的游戏状态使用的维度。此外,请注意这种集成形式容易出现轻微的数学错误。

答案 1 :(得分:5)

this documentation开始,看起来SmoothStep需要3个参数 - 你想要在它们之间移动的两个值以及它们之间的数量,它们可能需要介于0和1之间。
所以说你有一个浮点数f,它在一段时间内从0线性增加到目标速度。而不是直接使用f作为速度,使用SmoothStep将如下所示:

float speed = MathHelper.SmoothStep(0, destSpeed, f/destSpeed);

这篇文档真的很糟糕。

答案 2 :(得分:0)

我在此期间找到了非常有用的网站。 http://johnnygizmo.blogspot.com/2008/10/xna-series-basic-ai.html