我有一輛車,加速時,我想速度增加「緩慢」..XNA MathHelper.SmoothStep?它是如何工作的?
在看了幾個網站後,我得出的結論是,SmoothStep方法可以用來做到這一點?
我幾乎知道如何移動紋理和東西,所以使用smoothstep來增加浮點數或類似的值的例子會非常有用!
感謝提前:)
,我認爲這是可悲的心不是在MSDN庫中的所有方法的例子。
我有一輛車,加速時,我想速度增加「緩慢」..XNA MathHelper.SmoothStep?它是如何工作的?
在看了幾個網站後,我得出的結論是,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,取決於您的遊戲狀態使用了多少維度。另外請注意,這種整合形式容易出現輕微的數學錯誤。
從this documentation它看起來像SmoothStep接受3個參數 - 您要移轉的兩個值和可能需要在0和1之間
所以說你有一個浮動的f從線性遞增它們之間的量0到一段時間內的目標速度。而不是直接使用F作爲速度,採用SmoothStep應該是這樣的:
float speed = MathHelper.SmoothStep(0, destSpeed, f/destSpeed);
這真的是驚人的這個文件是多麼糟糕。
我在此期間找到了非常有用的網站。 http://johnnygizmo.blogspot.com/2008/10/xna-series-basic-ai.html
當您需要將離散數字插入實數並且您需要關鍵點斜率爲零時。可以說你想讓你的車在一個精確的時刻慢慢地開始,然後慢慢停下來,然後SmootStep會幫你。 – Coincoin 2009-02-26 17:20:52