Jednoduché animace v WinForms

hlasů
20

Představte si, že chcete animovat nějaký objekt na WinForm. Nastavíte časovač aktualizovat stav nebo modelu, a přepsat události laku formuláře. Ale odtud, co je nejlepší způsob, jak neustále překreslit formulář pro animaci?

  • Znehodnotit formulář, jakmile je hotovo kreslení?
  • Setup druhý časovač a znehodnotit formulář v pravidelných intervalech?
  • Možná, že existuje společný vzor pro tuto věc?
  • Existují nějaké užitečné .NET třídy pomoct?

Pokaždé musím to udělat já objevovat novou metodu s novým nevýhodu. Jaké jsou zkušenosti a doporučení z komunity SO?

Položena 14/08/2008 v 17:44
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
46

Vytvořil jsem knihovnu, která by mohla pomoci s tím. Říká se tomu Přechody, a lze nalézt zde: http://code.google.com/p/dot-net-transitions/

Využívá časovače běží na pozadí nit animovat objekty. Knihovna je open-source, takže je-li jakékoli použití na vás, můžete se podívat na kód, aby viděli, co to dělá.

Odpovězeno 20/07/2009 v 22:10
zdroj uživatelem

hlasů
9

V některých situacích je to rychlejší a pohodlnější nevytáhl pomocí události laku, ale dostat se objekt Graphics z řídícího / formy a malbou „na“ to. To může dát nějaké problémy s neprůhledností / anti-aliasing / textu atd, ale mohlo stát za to, pokud jde o nemají překreslit celou shabang. Něco v duchu:

private void AnimationTimer_Tick(object sender, EventArgs args)
{
    // First paint background, like Clear(Control.Background), or by
    // painting an image you have previously buffered that was the background.
    animationControl.CreateGraphics().DrawImage(0, 0, animationImages[animationTick++])); 
}

Používám to v některých ovládacích sebe a mají pufrované obrazy na „clear“ na pozadí s, když je předmětem zájmu se pohybuje nebo je třeba je odstranit.

Odpovězeno 14/08/2008 v 18:39
zdroj uživatelem

hlasů
3

To, co děláte, je jediným řešením jsem kdy použil v WinForms (časovač s konstantními redrawings). Existuje spoustu technik, které můžete použít, aby zkušenosti uživatele s tím jemnější (například dvojité ukládání do vyrovnávací paměti).

Možná budete chtít dát WPF vyzkoušet. K dispozici jsou vestavěné zařízení pro dělání animací ve WPF, a jsou mnohem jemnější (a vyžadují méně kódu a žádnou synchronizaci z vaší strany) než roztok na bázi časovače.

Všimněte si, že není nutné používat WPF po celé své aplikace pro tohoto řešení; je možné sbalit tuto funkci do ovládacího prvku WPF a vložit ovládací prvek v aplikaci WinForms (nebo neřízený aplikaci, když na to přijde):

http://www.codeproject.com/KB/WPF/WPF_UserControls.aspx

Odpovězeno 14/08/2008 v 17:50
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more