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 回答