2012-03-26 1 views
0

Silverlight와 Storyboard를 사용하면 같은 속도로 두 개의 다른 거리를 이동하는 방법은 무엇입니까? 지금 내 컨트롤에 애니메이션을 적용하려면 아래 코드를 사용하고 있습니다. 그러나 한 컨트롤이 100 픽셀 이동하고 다른 컨트롤이 1000 픽셀 이동해야하는 경우 애니메이션은 같은 속도로 실행되지 않습니다. 100 픽셀 이동 거리가있는 것은 훨씬 느립니다. 이것은 애니메이션의 지속 시간 때문입니다. 그러나 애니메이션을 실행하려면 설정해야합니다.두 물체가 같은 거리에서 다른 거리를 이동하는 방법은 무엇입니까?

이렇게하는 또 다른 방법이 있으며 컨트롤이 이동해야하는 거리가 무엇이든 이동 속도는 동일하게 유지해야합니까? CodeInChaos가 언급 한 바와 같이

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

이전에 애니메이션을 완성하기 위해 이동 거리가 짧은 항목을 원한다고 가정합니까? 그렇지 않다면 나는 상대성 이론을 불러내어야한다고 생각합니다. –

+0

일정한 속도를 원할 경우 거리에 직접 비례하여 지속 시간을 늘려야합니다. – CodesInChaos

+0

@CodeInChaos 그 점을 이해합니다. 그러나 Silverlight에서 저를 위해 뭔가를 기대합니다. 나는 시간이 일정하기를 원하지 않는다. 나는 속도를 원한다. – Martin

답변

1

, 당신은 당신의 여행 속도를 일정하게하기 위해 변수 또는 두 가지를 추가해야 할 수도 있습니다,하지만이 여행 할 수있는 거리에 관계없이 작동합니다.

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; 
관련 문제