/ / Do głównej pętli mojej gry, co powinienem wziąć pod uwagę: DispatcherTimer Vs StoryBoard - wpf, animacja, wielowątkowość, timing

Jeśli chodzi o główną pętlę mojej gry, co powinienem wziąć pod uwagę: DispatcherTimer Vs StoryBoard - wpf, animation, multithreading, timing

Piszę grę, w której chcę zainicjować wydarzenie dla mojej głównej pętli gry, wydarzenie musi zostać wystrzelone po bardzo krótkim czasie.

DispatcherTimer pomógł mi w implementacji tego, natknąłem się na ten artykuł

http://blogs.silverlight.net/blogs/msnow/archive/2008/07/09/storyboard-versus-dispatchertimer-for-animation-and-game-loops.aspx

zgodnie z tym podejście StoryBoard jest lepszenastępnie dispatchertimer. Ten blog jest dla silverlight, wciąż szukam w dokumentach MSDN, jeśli storyboard WPF jest również uruchamiany w drugim wątku. Czy ktoś wie, czy korzystanie z zegara Story w WPF ma przewagę nad czasomierza dyspozytora.

Odpowiedzi:

2 dla odpowiedzi № 1

Powiedziałbym, że odkąd pochodzi zoficjalny blog, to prawdopodobnie jest poprawny, a zalety są wymienione w tym wpisie na blogu, który został napisany przez Senior SDET Lead w zespole Web Tools w Microsoft, więc musiałbym założyć, że on jest mówiąc zasługi.

Z moich badań, powody, dla których StoryboardTimer jest lepszy niż DispatcherTimer są następujące:

  1. StoryBoard jest obsługiwany w osobnym wątku, na który nie ma wpływu wątek interfejsu użytkownika, w którym działa DispatcherTimer.
  2. DispatcherTimer jest zegarem o niższej rozdzielczości niż timer stojący za klasą Storyboard, co powoduje utratę wierności.
  3. Wykonanie Storyboard jest bardziej stabilne w różnych obsługiwanych systemach operacyjnych i przeglądarkach internetowych.

4 dla odpowiedzi nr 2

Możesz także spróbować użyć zdarzenia CompositionTarget.Rendering, po prostu trzymaj się z dala od StoryBoard. Oto kilka linków dotyczących CompositionTarget.Rendering:

Jak: renderować w odstępach między klatkami za pomocą CompositionTarget

Silverlight CompositionTarget.Rendering Game Loop

Zabawa z animacją Część 1 - CompositionTarget.Rendering