私は車を持っていて、加速するときに速度を「ゆっくり」上げたい..
いくつかのサイトを見た後、SmoothStep メソッドを使用してそれを行うことができるという結論に達しましたか?
私はテクスチャなどを動かす方法をよく知っているので、smoothstep を使用して float などの値を増やす例は非常に役に立ちます!
前もって感謝します :)
MSDN ライブラリにすべてのメソッドの例がないのは悲しいことです。
私は車を持っていて、加速するときに速度を「ゆっくり」上げたい..
いくつかのサイトを見た後、SmoothStep メソッドを使用してそれを行うことができるという結論に達しましたか?
私はテクスチャなどを動かす方法をよく知っているので、smoothstep を使用して float などの値を増やす例は非常に役に立ちます!
前もって感謝します :)
MSDN ライブラリにすべてのメソッドの例がないのは悲しいことです。
SmoothStepはここでは役に立ちません。SmoothStepは2つの値の補間関数です。これは、副鼻腔補間に似た動作をします。それはゆっくりと加速し、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 つの引数を取るように見えます - 移動したい 2 つの値と、それらの間の量はおそらく 0 から 1 の間である必要があります。
つまり、0 から目的の速度まで直線的に増加する float f があるとします。一定期間にわたって。f を速度として直接使用する代わりに、SmoothStep を使用すると次のようになります。
float speed = MathHelper.SmoothStep(0, destSpeed, f/destSpeed);
このドキュメンテーションがどれほど悪いかは本当に驚くべきことです。
そんな時に見つけた便利なサイト。 http://johnnygizmo.blogspot.com/2008/10/xna-series-basic-ai.html