2012-03-26 6 views
0

Wie können Sie mit Silverlight und einem Storyboard zwei Objekte mit derselben Geschwindigkeit in unterschiedlicher Entfernung transportieren? Zur Zeit benutze ich den folgenden Code, um meine Steuerelemente zu animieren. Wenn jedoch ein Steuerelement 100 Pixel und das andere 1000 Pixel durchlaufen muss, wird die Animation nicht mit der gleichen Geschwindigkeit ausgeführt. Der mit einer 100 Pixel großen Entfernung ist viel langsamer. Dies liegt an der Dauer der Animation, aber ich muss sie einstellen, wenn die Animation ausgeführt werden soll.Wie haben zwei Objekte unterschiedliche Entfernungen mit gleicher Geschwindigkeit?

Gibt es eine andere Möglichkeit, dies zu tun und sicherzustellen, dass unabhängig von der Entfernung, die eine Steuerung zurücklegen muss, die Geschwindigkeit der Bewegung gleich ist?

var easefall = new QuadraticEase(); 
easefall.EasingMode = EasingMode.EaseIn; 

Storyboard storyboard = new Storyboard(); 
var animation = new DoubleAnimation(); 
animation.To = // 10, 50, 100... 
animation.Duration = TimeSpan.FromSeconds(0.50); 
animation.EasingFunction = easefall; 
+0

Ich nehme an, Sie möchten das Element mit einer kürzeren Strecke zu reisen, um seine Animation früher abzuschließen? Wenn nicht, müssen wir auf die Relativitätstheorie zurückgreifen. –

+0

Wenn Sie konstante Geschwindigkeit wünschen, müssen Sie die Dauer direkt proportional zur Entfernung erhöhen. – CodesInChaos

+0

@CodeInChaos Ich verstehe das, aber ich würde etwas in Silverlight erwarten, das für mich zu tun. Ich will nicht, dass die Zeit eine Konstante ist, ich will Geschwindigkeit. – Martin

Antwort

1

Wie CodeInChaos erwähnt, müssen Sie möglicherweise eine Variable oder zwei hinzufügen, um Ihre Reisegeschwindigkeit konstant zu machen, aber dies sollte unabhängig von der Entfernung arbeiten zu reisen.

double rate = 0.05; //speed per unit of one change 
double duration = distance * rate; //i'll assume your distance is an input from somewhere 

var easefall = new QuadraticEase(); 
easefall.EasingMode = EasingMode.EaseIn; 

Storyboard storyboard = new Storyboard(); 
var animation = new DoubleAnimation(); 
animation.To = // 10, 50, 100... 
animation.Duration = TimeSpan.FromSeconds(duration); 
animation.EasingFunction = easefall;