2

次のコードを使用して回転できる単純な 3D キューブがあります。

void mui3D_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
            RotateTransform3D rotation = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), 0), mui.Model.Bounds.Location);

            DoubleAnimation rotateAnim = new DoubleAnimation(0, 130d TimeSpan.FromMilliseconds(3000));

            rotateAnim.Completed += new EventHandler(rotateAnim_Completed); 

            mui.Transform = rotation;

            rotation.Rotation.BeginAnimation(AxisAngleRotation3D.AngleProperty, rotateAnim);
    }

このコードを実行するたびに、アニメーションを使用して、Y 軸を中心に 0 ~ 130 度の角度で立方体を回転させます。

ただし、回転を「累積的に」適用して、前の回転が考慮され、立方体が前の回転を終了した角度から各回転を開始するようにしたいと思います。

例: アニメーション コンストラクターは、角度の "from" と "to" の値を必要とする代わりに、現在の回転角度に基づいてキューブをさらに 130 度回転させるだけです。

現在の角度を含むメンバー変数を簡単に使用してアニメーションに渡し、アニメーションが完了したときに更新することができます。しかし、これを達成するためにWPFを使用する標準的なアプローチがあるかどうか疑問に思っています。

4

1 に答える 1

1

オブジェクトの変換行列から現在のオイラー回転角度を度単位で取得する方法があると確信しています。次に、それを「from」値として使用し、「to」値にアニメーション化できます。

それができない場合は、アプリケーションのどこかに、回転した立方体の度数を記憶する変数を作成するだけです。関数を実行するたびに、回転させたい度数を追加して、結果を変数に保存します。

いくつかの擬似コード:

angle = 0
function onClick:
    new_angle = angle + 30
    Animate(angle, new_angle)
    angle = new_angle
于 2009-02-05T07:24:15.563 に答える