Manuelle Animationen flüssig und konstant?

Meldur

Erfahrenes Mitglied
Hallo,

ich programmiere ein Spiel in WPF und muss dazu fließende Bewegungen von grafischen Elementen (z.B. ein Rechteck) manuell steuern. Deshalb kann ich keine DoubleAnimation verwenden. Wenn ich nun z.B. einen DispatcherTimer laufen lasse, der alle 25ms einen Bewegungsschritt ausführt, so ruckelt die Bewegung immer etwas. Verwende ich das CompositionTarget.Rendering-Event, so ist die Bewegung zwar stabil (klar, denn es wird ja immer brav pro Renderschritt animiert und nicht mitunter dazwischen), aber die Geschwindigkeit ist abhängig von der Bildschirmfrequenz. Somit würden die gleichen Bewegungen im Spiel bei 50Hz langsamer laufen, als bei 60Hz.
Was wäre also der richtige Ansatz, um ruckelfreie Bewegungen mit immer gleicher Geschwindigkeit zu erzeugen?

Danke,
Meldur
 
Verwende ich das CompositionTarget.Rendering-Event, so ist die Bewegung zwar stabil (klar, denn es wird ja immer brav pro Renderschritt animiert und nicht mitunter dazwischen), aber die Geschwindigkeit ist abhängig von der Bildschirmfrequenz.
Du kannst doch in jedem Rendering-Event ausrechnen, wie weit das Rechteck verschoben werden muss, damit die Geschwindigkeit konstant ist. Merke dir einfach die Systemzeit beim letzten Event und berechne die Zeitdifferenz zur aktuellen Zeit. Somit kennst du die vergangene Zeitspanne und weisst wie weit du das Rechteck verschieben musst.
 
Zurück