我有一辆车,加速时我希望速度“慢慢”增加..
在查看了几个站点后,我得出的结论是,可以使用 SmoothStep 方法来做到这一点?
我几乎知道如何移动纹理和东西,所以一个使用 smoothstep 来增加浮点值或类似东西的例子会非常有帮助!
提前致谢 :)
我觉得很遗憾 MSDN 库中没有所有方法的示例。
我有一辆车,加速时我希望速度“慢慢”增加..
在查看了几个站点后,我得出的结论是,可以使用 SmoothStep 方法来做到这一点?
我几乎知道如何移动纹理和东西,所以一个使用 smoothstep 来增加浮点值或类似东西的例子会非常有帮助!
提前致谢 :)
我觉得很遗憾 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,具体取决于您的游戏状态使用的维度。此外,请注意这种形式的集成容易出现轻微的数学错误。
从这个文档看来,SmoothStep 需要 3 个参数 - 您想要在它们之间移动的两个值以及它们之间可能需要介于 0 和 1 之间的量。
所以假设您有一个从 0 线性递增到目标速度的浮点 f经过一段时间。而不是直接使用 f 作为速度,使用 SmoothStep 看起来像这样:
float speed = MathHelper.SmoothStep(0, destSpeed, f/destSpeed);
这份文档的糟糕程度真的令人惊讶。
我在此期间发现的非常有用的网站。 http://johnnygizmo.blogspot.com/2008/10/xna-series-basic-ai.html