/// <summary> /// 在3D空间的Z轴方向移动模型到目标点 /// </summary> /// <param name="geom">模型实例</param> /// <param name="descriptor">模型的描述子</param> /// <param name="duration">动画时长</param> /// <param name="toZ">目标Z</param> /// <param name="accZ">加速度Z</param> public static void ZMoveToAnimation3D(GeometryModel3D geom, ModelDescriptor3D descriptor, Duration duration, double toZ, double accZ = 0) { if (geom == null) { return; } SpriteAnimation.ZMoveAnimation3D(geom, descriptor, duration, descriptor.OffsetZ, toZ, accZ); }
/// <summary> /// 在3D空间的Y轴方向移动模型到目标点 /// </summary> /// <param name="geom">模型实例</param> /// <param name="descriptor">模型的描述子</param> /// <param name="duration">动画时长</param> /// <param name="toY">目标Y</param> /// <param name="accY">加速度Y</param> public static void YMoveToAnimation3D(GeometryModel3D geom, ModelDescriptor3D descriptor, Duration duration, double toY, double accY = 0) { if (geom == null) { return; } SpriteAnimation.YMoveAnimation3D(geom, descriptor, duration, descriptor.OffsetY, toY, accY); }
/// <summary> /// 在3D空间的X轴方向移动模型到目标点 /// </summary> /// <param name="geom">模型实例</param> /// <param name="descriptor">模型的描述子</param> /// <param name="duration">动画时长</param> /// <param name="toX">目标X</param> /// <param name="accX">加速度X</param> public static void XMoveToAnimation3D(GeometryModel3D geom, ModelDescriptor3D descriptor, Duration duration, double toX, double accX = 0) { if (geom == null) { return; } SpriteAnimation.XMoveAnimation3D(geom, descriptor, duration, descriptor.OffsetX, toX, accX); }
/// <summary> /// 在3D空间模型将不透明度更改到目标值 /// </summary> /// <param name="geom">模型实例</param> /// <param name="descriptor">模型的描述子</param> /// <param name="duration">动画时长</param> /// <param name="toOpacity">目标不透明度</param> /// <param name="acc">加速度</param> public static void OpacityToAnimation3D(GeometryModel3D geom, ModelDescriptor3D descriptor, Duration duration, double toOpacity, double acc = 0) { if (geom == null) { return; } SpriteAnimation.OpacityAnimation3D(geom, descriptor, duration, descriptor.Opacity, toOpacity, acc); }
/// <summary> /// 在3D空间的Y轴方向移动模型 /// </summary> /// <param name="geom">模型实例</param> /// <param name="descriptor3D">模型的描述子</param> /// <param name="duration">动画时长</param> /// <param name="fromZ">起始Z</param> /// <param name="toZ">目标Z</param> /// <param name="accZ">加速度Z</param> public static void ZMoveAnimation3D(GeometryModel3D geom, ModelDescriptor3D descriptor3D, Duration duration, double fromZ, double toZ, double accZ) { if (duration.TimeSpan.TotalMilliseconds == 0 || GlobalConfigContext.GAME_PERFORMANCE_TYPE == GlobalConfigContext.PerformanceType.NoEffect) { var translator = (geom.Transform as Transform3DGroup).Children.First(t => t is TranslateTransform3D) as TranslateTransform3D; translator.OffsetZ = descriptor3D.OffsetZ = descriptor3D.ToOffsetZ; } else { DoubleAnimation cardAnimation = new DoubleAnimation { From = fromZ, To = toZ, Duration = duration, FillBehavior = FillBehavior.Stop }; if (accZ >= 0) { cardAnimation.AccelerationRatio = accZ; } else { cardAnimation.DecelerationRatio = -accZ; } var transform = (geom.Transform as Transform3DGroup).Children.First(t => t is TranslateTransform3D); var flagSb = new Storyboard { Name = "FlagSb_" + DateTime.Now.Ticks }; SpriteAnimation.aniDict[flagSb] = null; cardAnimation.Completed += delegate { (transform as TranslateTransform3D).OffsetZ = descriptor3D.OffsetZ = descriptor3D.ToOffsetZ; SpriteAnimation.aniDict.Remove(flagSb); }; transform.BeginAnimation(TranslateTransform3D.OffsetZProperty, cardAnimation); } }
/// <summary> /// 变更3D模型的不透明度 /// </summary> /// <param name="geom">模型实例</param> /// <param name="descriptor3D">模型的描述子</param> /// <param name="duration">动画时长</param> /// <param name="fromOpacity">起始不透明度</param> /// <param name="toOpacity">目标不透明度</param> /// <param name="acc">加速度</param> public static void OpacityAnimation3D(GeometryModel3D geom, ModelDescriptor3D descriptor3D, Duration duration, double fromOpacity, double toOpacity, double acc) { if (duration.TimeSpan.TotalMilliseconds == 0 || GlobalConfigContext.GAME_PERFORMANCE_TYPE == GlobalConfigContext.PerformanceType.NoEffect) { (geom.Material as DiffuseMaterial).Brush.Opacity = descriptor3D.Opacity = descriptor3D.ToOpacity; } else { DoubleAnimation opAnimation = new DoubleAnimation { From = fromOpacity, To = toOpacity, Duration = duration, FillBehavior = FillBehavior.Stop }; if (acc >= 0) { opAnimation.AccelerationRatio = acc; } else { opAnimation.DecelerationRatio = -acc; } var brusher = (geom.Material as DiffuseMaterial).Brush; var flagSb = new Storyboard { Name = "FlagSb_" + DateTime.Now.Ticks }; SpriteAnimation.aniDict[flagSb] = null; opAnimation.Completed += delegate { (geom.Material as DiffuseMaterial).Brush.Opacity = descriptor3D.Opacity = descriptor3D.ToOpacity; SpriteAnimation.aniDict.Remove(flagSb); }; brusher.BeginAnimation(Brush.OpacityProperty, opAnimation); } }