当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《XNAMathHelper.SmoothStep?它是如何工作的?》经验,为你挑选了2个好方法。

我有一辆车,当加速时,我希望速度"慢慢"增加..

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

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

提前致谢 :)

我认为很遗憾MSDN库中的所有方法都没有示例.



1> Coincoin..:

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



2> shoosh..:

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

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

这篇文档真的很糟糕.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有