我有一辆车,加速时我希望速度“慢慢”增加..
在查看了几个网站后,我得出结论可以使用SmoothStep方法来做到这一点?
我几乎知道如何移动纹理和东西,所以使用smoothstep来增加浮点数或类似值的示例,将非常有用!
提前致谢:)
我觉得很遗憾MSDN库中的所有方法都没有示例。
答案 0 :(得分:12)
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,具体取决于您的游戏状态使用的维度。此外,请注意这种集成形式容易出现轻微的数学错误。
答案 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