我有一个简单的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度的角度旋转立方体。
但是我想要“累积”地应用旋转,以便考虑任何先前的旋转,并且立方体从完成前一次旋转的角度开始每次旋转。
例如:动画构造函数不需要角度的“从”和“到”值,只需根据当前旋转角度旋转立方体130度。
我可以轻松地使用包含当前角度的成员变量,将其传递给动画,然后在动画完成时更新它。但我想知道是否有使用WPF实现这一目标的标准方法。
答案 0 :(得分:1)
我确信有一种方法可以从对象的变换矩阵中检索当前的Euler旋转角度(以度为单位)。然后,您可以将其用作“from”值,并将“an”值设置为“to”值。
如果不这样做,只需在应用程序的某处创建一个变量,该变量会记住多维数据集旋转的度数。每次运行该函数时,只需添加您想要旋转的度数,然后将结果存储回变量中。
一些伪代码:
angle = 0
function onClick:
new_angle = angle + 30
Animate(angle, new_angle)
angle = new_angle