あるポイントから別のポイントに値を簡単に補間するイージング関数を提供するXnaTweenerを使用できます...
Xna Tweenerプロジェクトに基づいたいくつかのコードとそれがどのように機能するかを示すビデオを含む返信です...
https://gamedev.stackexchange.com/a/26872/8390
[編集]
次のように、プラットフォームの動きを定義する一連のキーが必要です。
public class MovementKey
{
public float Time = 0;
public float Duration;
public Vector2 Traslation; // Traslation is relative to previous key
public TweeningFunction Function;
internal float GetRatio( float Elapsed )
{
// Always return a value in [0..1] range
// 0 .. Start position relative to accumulated traslations of previous keys
// 1 .. Target relative position reached.. then should go to next key if avalaible
return Function( Elapsed, 0, 1, Duration );
}
}
そして、あなたはこの方法で動きを処理することができます:
public class Movement {
List<MovementKey> Keys;
public void Update( float Seconds)
{
float ratio;
if (Playing) Elapsed += Seconds;
while ( index!= Keys.Count - 1 && Elapsed > Keys[iKey + 1].Time )
{
Traslation += Keys[iKey].Traslation; // Relative
index++;
}
if ( index == Keys.Count - 1 && Elapsed > Keys[iKey].Time + Keys[iKey].Duration )
{
ratio = 1;
if ( DoLoop )
{
Elapsed -= (Keys[index].Time + Keys[iKey].Duration);
Index = 0;
Traslation = Vector2.zero;
}
}
else {
ratio = Keys[index].GetRatio( Elapsed - Keys[index].Time );
}
Position = DefaultPosition + Traslation + ratio * Keys[index].Traslation;
}
"DefaultPosition"は開始位置、 "Traslation"は複数のキーの動きを累積し、各キーの移動は前のキーを基準にしています。したがって、比率係数[0..1]を掛けると、補間された相対移動を返します。前のキーからそのキーに到達するには...
ここに、ここで説明するように定義されたプラットフォームの動きを示す別のビデオがあります...
http://www.youtube.com/watch?v=ZPHjpB-ErnM&feature=player_detailpage#t=104s
私はこのコードを理解しやすくするためにやり直しました...多分それはいくつかのバグを持っています...元のコードは同じ動きのいくつかのインスタンスを処理しますが、各インスタンス間でいくつかの遅延があります...このコードは確かにできる簡単に再設計する...