2012-03-26 30 views
0

使用Silverlight和Storyboard,如何讓兩個物體以相同的速度行進不同的距離?現在,爲了使我的控件動畫化,我使用下面的代碼。但是,如果一個控制器必須傳送100個像素,另一個控制1000個像素,則動畫不會以相同的速度運行。具有100像素行進距離的那個要慢得多。這是由於動畫的持續時間,但我必須設置它,如果我想動畫運行。如何讓兩個物體以相同的速度行進不同距離?

有沒有另外一種方法來做到這一點,並確保無論控制器行駛的距離是多少,運動的速度是一樣的?

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

我假設你想要較短距離的物品前往完成其動畫?如果不是,我想我們必須引用相對論。 – 2012-03-26 13:39:42

+0

如果你想恆定速度,你需要增加與距離成正比的持續時間。 – CodesInChaos 2012-03-26 14:18:58

+0

@CodeInChaos我明白,但我希望Silverlight能爲我做這件事。我不想讓時間成爲一個常數,我想要速度。 – Martin 2012-03-26 14:28:06

回答

1

正如CodeInChaos提到的,你可能需要爲了使您的旅行速率常數增加一個或兩個變量,但無論這應該工作旅行的距離。

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; 
相關問題