2009-02-26 74 views
5

我有一輛車,加速時,我想速度增加「緩慢」..XNA MathHelper.SmoothStep?它是如何工作的?

在看了幾個網站後,我得出的結論是,SmoothStep方法可以用來做到這一點?

我幾乎知道如何移動紋理和東西,所以使用smoothstep來增加浮點數或類似的值的例子會非常有用!

感謝提前:)

,我認爲這是可悲的心不是在MSDN庫中的所有方法的例子。

回答

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,取決於您的遊戲狀態使用了多少維度。另外請注意,這種整合形式容易出現輕微的數學錯誤。

5

this documentation它看起來像SmoothStep接受3個參數 - 您要移轉的兩個值和可能需要在0和1之間
所以說你有一個浮動的f從線性遞增它們之間的量0到一段時間內的目標速度。而不是直接使用F作爲速度,採用SmoothStep應該是這樣的:

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

這真的是驚人的這個文件是多麼糟糕。

相關問題