Animace (DirectComposition)

Poznámka

U aplikací ve Windows 10 doporučujeme místo DirectComposition používat rozhraní API pro Windows.UI.Composition. Další informace najdete v tématu Modernizace desktopové aplikace pomocívrstvy vizuálu .

Toto téma popisuje základy animace Microsoft DirectComposition. Obsahuje následující témata:

Co je animace?

animace je optické iluzi vytvořené rychlým prováděním přírůstkových změn vizuálu v určitém časovém období a překreslením vizuálu po provedení každé změny. Vzhledem k tomu, že k překreslení dochází rychle, mozek vnímá přírůstkové změny jako jednu měnící se scénu, stejně jako ve filmu nebo videu živé akce.

Následující tabulka popisuje některé z typických způsobů použití animace.

Animace Popis
Rolování Animace slouží k přidání funkcí, jako je fyzika emulující dynamika, do ovládacího prvku seznamu pro posouvání.
Přechody scén Pomocí animace můžete vytvářet přechody navigační scény, které zajišťují kontinuitu mezi úkoly v pracovním postupu. Přechody navigační scény poskytují kontext, který zobrazuje uživatele, kde byl, kde se nachází, a kde musí přejít dál.
Interakce mezi okny Animace prvků uživatelského rozhraní různýchaplikacíchmm prvkům různých aplikací umožňuje získat představu o bezproblémové kontinuitě mezi nimi, aby uživatelé mohli provádět úkoly, které zahrnují přechod z jedné aplikace na jinou.

 

Vlastnosti, které můžou být animované

V DirectComposition animujete vizuál použitím animace na jednotlivé vlastnosti objektů, které definují vizuál. Pokud například chcete vizuál přesunout vodorovně přes obrazovku, použijete animaci na vlastnost OffsetX vizuálu. Podobně pokud byste chtěli provést jednoduché animované 2D otočení vizuálu, použili byste animaci na vlastnost Angle objektu transformace 2D a pak použít 2D transformační objekt na transformační vlastnost vizuálu.

DirectComposition umožňuje použít animaci na libovolnou vlastnost objektu, která přebírá skalární hodnotu. Současné animace můžete použít u více vlastností a více objektů.

DirectComposition spouští animace na samostatném vlákně. Můžete spustit animaci nebo sadu animací a pak na vláknech aplikace udělat další práci, nebo dokonce umístit vlákna do režimu spánku, zatímco kompoziční modul spouští animace s odpovídající frekvencí snímků.

Animační funkce

DirectComposition animuje vlastnost objektu na základě funkce animace, kterou definujete. animační funkce je konstrukce, která určuje, jak se hodnota vlastnosti objektu během časového období mění. Můžete například definovat animační funkci, která v průběhu 4 sekund změní hodnotu vlastnosti z 1 na 360. Pokud pak použijete animační funkci na vlastnost Úhel objektu transformace otočení 2D a pak použijete transformační objekt na vlastnost Transformace vizuálu, animační funkce by otočila vizuál v plném kruhu za 4 sekundy.

Animační funkce je reprezentována objektem animace vytvořený voláním IDCompositionDevice::CreateAnimation metoda. Funkci animace vytvoříte pomocí metod objektu animace IDCompositionAnimation rozhraní pro připojení animačních segmentůpo jednom k poli, které definuje animační funkci. Při připojování segmentu zadáte posun založený na nule, který označuje počáteční čas segmentu vzhledem k začátku animační funkce. Segmenty animace musí být připojeny v rostoucím pořadí počátečních časů. Pokus o připojení segmentu animace, jehož počáteční čas je před nebo rovno předchozímu segmentu, selže. Animační funkce může mít zadaný koncový čas, který označuje, kdy má funkce dojít k závěru.

Pokud není uvedeno jinak, spustí se animační funkce, když Správce oken plochy (DWM) obdrží příkaz ke spuštění animace. Každý segment se spustí, dokud nedosáhne počátečního času dalšího segmentu. Všechny nesouvisející změny, ke kterým dochází v hodnotě animované vlastnosti mezi segmenty, se považují za diskrétní změny.

U vlastnosti použijete animační funkci nastavením hodnoty vlastnosti na IDCompositionAnimation ukazatel animačního objektu, který představuje animační funkci. Stejný animační objekt lze použít na více vlastností stejného objektu a také na vlastnosti jiných objektů vytvořených stejným zařízením.

Segmenty animace

Animační segmenty jsou základní definice časování animační funkce; jsou primitivy, ze kterých jsou sestaveny složitější a vyšší úrovně animačních funkcí. Animační segment je vytvořen z řady parametrů, které popisují funkci a čas zahájení segmentu vzhledem k začátku animační funkce. Pro každý segment probíhá čas (t) podél vodorovné osy a začíná na t = 0.

Krychlový segment

Načasování krychlových segmentů je definováno krychlovým polynomem. Pro daný časový vstup (t) je výstupní hodnota uvedena následující rovnicí:

x(t) = at³ + bt² + ct + d

Následující diagram znázorňuje animační funkci, která obsahuje dva krychlové segmenty. První segment přechází hodnotu od 0 do 16 přes 4 sekundy a druhý změní hodnotu lineárně od 16 do 0 během dalších 4 sekund. První přechod probíhá podél tohoto krychlového polynomu:

x(t) = t³ - 6t² + 12t

a druhý přechod probíhá podél tohoto:

x(t) = - 4t + 16

diagram funkce animace se dvěma krychlovými segmenty

Do animační funkce přidáte krychlový segment pomocí metody IDCompositionAnimation::AddCubic.

Sinusoidální segment

Časování sinusoidního segmentu je definováno následující rovnicí:

x(t) = Biase + Amplituda * sin(t*frekvence*2*PI + fáze*PI/180.0)

K animační funkci přidáte sinusoidální segment pomocí IDCompositionAnimation::AddSinusoidal metoda.

Opakovat segment

Segment opakování opakuje zadanou předchozí část funkce animace. Opakování segmentu způsobí, že zadaná část funkce animace bude nekonečně opakovat, dokud nebude zjištěn další segment nebo se dosáhne zadaného konce animace. Předchozí část animace se skládá z jiných segmentů, včetně dalších opakujících se segmentů. Opakující se segment nelze použít jako první segment funkce animace.

Následující diagram znázorňuje animační funkci, která se skládá ze dvou krychlových segmentů o délce 4 sekundy. Následuje segment opakování, který trvá 12 sekund. Segment opakování začíná 8 sekund do animace a opakuje předchozí 6 sekund animace dvakrát, dokud se koncový segment nedosáhne 20 sekund.

diagram funkce animace, která obsahuje dva krychlové segmenty a jeden opakující se segment

Pokud chcete přidat segment opakování do funkce animace, použijte IDCompositionAnimation::AddRepeat metoda.

Koncový segment

Po vytvoření animační funkce ze segmentů můžete přidat koncový segment, aby funkce animace skončila v určitém čase. Pokud nepřipodáte koncový segment, spustí se poslední segment animační funkce na neomezenou dobu.

Koncový segment připojíte voláním IDCompositionAnimation::End metoda, která určuje posun od začátku animační funkce, která označuje koncový bod funkce. Posun musí být větší než počáteční posun předchozího segmentu. Koncový segment také nelze použít jako první primitivní funkci animace.

Když zavoláte End, zadáte také konečnou hodnotu pro vlastnost, která se bude animovat. Vlastnost je nastavena na zadanou konečnou hodnotu v okamžiku, kdy je dosaženo koncového bodu animační funkce.

Po připojení koncového segmentu není možné k animační funkci připojit žádné další segmenty. To znamená, že všechna volání metody objekt animace selžou s výjimkou IDCompositionAnimation::Reset. Volání Reset vrátí animační objekt k čistému stavu, ve kterém animační funkce neobsahuje žádné segmenty, v jakém okamžiku můžete znovu přidat segmenty.

Kompatibilita se Správcem animací systému Windows

Windows Animation Manager (Windows Animation) výstupem animačních primitiv ve formátu, který je kompatibilní s rozhraním API DirectComposition. To znamená, že DirectComposition může vytvářet animace založené na animačních primitivách vytvořených pomocí Animace systému Windows.

Další informace naleznete v tématu Správce animací systému Windows, IUIAnimationVariable2::GetCurve metoda a Správa animace DirectComposition pomocí nástroje Windows Animation Manager v2.

koncepty DirectComposition