2009-02-26 7 views
5

私は車を持っていて、加速したいときは速度が "ゆっくり"になるようにします。XNA MathHelper.SmoothStep?どのように機能するのですか?

私はいくつかのサイトを見て、SmoothStepメソッドを使ってそれを行うことができたと結論づけましたか?

私はテクスチャや素材を移動する方法をよく知っています。そのため、smoothstepを使用してfloatなどの値を大きくする例が非常に役立ちます。

:)事前に

おかげで、私はそれが悲しいと思いありえないMSDNライブラリ内のすべてのメソッドの例。あなたが間に移動する二つの値及びですからから直線的に増加させたフロートFを持っていると言う
0と1の間、おそらくにする必要があり、それらの間の量 - それはSmoothStepのように見えるthis documentationから

答えて

12

ここではSmoothStepはお手伝いしません。 SmoothStepは2値補間関数です。それは洞結紮に類似した何かをする。それはゆっくり加速し、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

は3つの引数を取ります0を指定された時間に渡って宛先の速度に戻します。

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

本当に、この文書がどのように悪い素晴らしいです:代わりにSmoothStepは次のようになります使用して、スピードとして直接Fを使用します。

0

非常に有用なサイト私はその間に見つかりました。 http://johnnygizmo.blogspot.com/2008/10/xna-series-basic-ai.html

+0

離散数を実数に補間する必要があり、キーポイントの傾きをゼロにする必要がある場合。正確な瞬間にゆっくりと車を始動させてからゆっくりと停止して、非常に正確な瞬間にすることを望んでいたら、SmootStepがそれを助けます。 – Coincoin

+0

メニューなど、あらゆる種類のアニメーショントランジションにも非常に便利です。 – Coincoin

+0

例があれば、投稿してください:) – Moulde

関連する問題