1

WPF アニメーションのスムージングに苦労しています

実際に私のアニメーション コードは次のとおりです。

private void AnimateX ( FrameworkElement element, double XMoveStart, double XMoveEnd, int secondX)
{

    SineEase eEase = new SineEase();
    eEase.EasingMode = EasingMode.EaseInOut;
    Storyboard sb = new Storyboard();

    DoubleAnimation daX = new DoubleAnimation(XMoveStart, XMoveEnd, new Duration(new TimeSpan(0, 0, 0, secondX, 0)));
    daX.EasingFunction = eEase;
    Storyboard.SetTargetProperty(daX, new PropertyPath("(Canvas.Left)"));

    sb.Children.Add(daX);

    element.BeginStoryboard(sb);
}

上記のコードは、オブジェクトを簡単に水平方向に移動する方法です。1つのオブジェクトだけが動いている場合はOKです。ただし、2 つ以上のオブジェクトが一緒に移動する (前のアニメーションがまだ完了していないときに別のオブジェクトで AnimateX メソッドを呼び出す) と、アニメーションがぎくしゃくし始めます。ぎくしゃくしたとは、アニメーションの過程でオブジェクトが揺れていることを意味します。

4

2 に答える 2

0

推測ですが、ストーリーボードを使用せずにプロパティを直接アニメーション化するとどうなりますか?

private void AnimateX(FrameworkElement element, double xMoveStart, double xMoveEnd, double durationSeconds)
{
    DoubleAnimation animation = new DoubleAnimation
    {
        From = xMoveStart,
        To = xMoveEnd,
        Duration = TimeSpan.FromSeconds(durationSeconds),
        EasingFunction = new SineEase { EasingMode = EasingMode.EaseInOut }
    };

    element.BeginAnimation(Canvas.LeftProperty, animation);
}
于 2012-10-01T08:54:44.040 に答える