5

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

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

我几乎知道如何移动纹理和东西,所以一个使用 smoothstep 来增加浮点值或类似东西的例子会非常有帮助!

提前致谢 :)

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

4

3 回答 3

13

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

于 2009-02-26T16:06:22.430 回答
6

这个文档看来,SmoothStep 需要 3 个参数 - 您想要在它们之间移动的两个值以及它们之间可能需要介于 0 和 1 之间的量。
所以假设您有一个从 0 线性递增到目标速度的浮点 f经过一段时间。而不是直接使用 f 作为速度,使用 SmoothStep 看起来像这样:

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

这份文档的糟糕程度真的令人惊讶。

于 2009-02-26T13:19:50.520 回答
0

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

于 2009-02-26T17:11:16.207 回答