Ich versuche, eine Animation zu erstellen, wo ich einen Kreis um bestimmte Winkel beim Übersetzen drehen möchte. (Grundsätzlich ein Rad auf einer Oberfläche rollen). Ich möchte den Drehwinkel des Rades kontrollieren. Wie erreiche ich das mit einer pro-Frame-basierten Animation?Kreis um einen bestimmten Winkel drehen in Animation mit WPF
<Window x:Class="WheelOnPath.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="1000" Width="1000" WindowState="Maximized" WindowStartupLocation="CenterScreen">
<Border BorderBrush="Gray" BorderThickness="1" Margin="4">
<Canvas>
<Path >
<Path.Fill>
<LinearGradientBrush>
<GradientStop Color="Purple" Offset="0.5"/>
<GradientStop Color="LightPink" Offset="0.5"/>
</LinearGradientBrush>
</Path.Fill>
<Path.Data>
<EllipseGeometry x:Name="rotateEllipse"
RadiusX="90" RadiusY="90"
Center="100,380">
</EllipseGeometry>
</Path.Data>
</Path>
</Canvas>
</Border>
</Window>
-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Animation;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Threading;
namespace WheelOnPath
{
public partial class MainWindow : Window
{
double time = 0, dt = 0;
TimeSpan lastRender = new TimeSpan();
public MainWindow()
{
InitializeComponent();
lastRender = TimeSpan.FromTicks(DateTime.Now.Ticks);
CompositionTarget.Rendering += StartRolling;
}
private void StartRolling(object sender,EventArgs e)
{
RenderingEventArgs ra = (RenderingEventArgs)e;
dt = (ra.RenderingTime - lastRender).TotalSeconds;
lastRender = ra.RenderingTime;
double x = rotateEllipse.Center.X + 10;
rotateEllipse.Center = new Point(x, rotateEllipse.Center.Y);
*RotateTransform rt = new RotateTransform(45);
rt.CenterX = 90;
rt.CenterY = 90;
rotateEllipse.Transform = rt;*
time += dt;
}
}
}
RotateTransform rt = neu RotateTransform (45); rt.CenterX = 90; rt.CenterY = 90; rotateEllipse.Transform = rt; – codewarrior