Animáció (DirectComposition)

Jegyzet

Windows 10-es alkalmazások esetén a DirectComposition helyett a Windows.UI.Composition API-kat javasoljuk. További információ: Asztali alkalmazás modernizálása a Visual layerhasználatával.

Ez a témakör a Microsoft DirectComposition animációjának alapjait ismerteti. A következő témaköröket tartalmazza:

Mi az az animáció?

animációs egy optikai illúzió, amely a vizualizációk növekményes módosításainak gyors, az egyes módosítások után történő újrarajzolásával hozható létre. Mivel az újrarajzok gyorsan történnek, az agy a növekményes változásokat egyetlen változó jelenetként érzékeli, ugyanúgy, mint egy mozgóképben vagy élő videóban.

Az alábbi táblázat az animáció használatának néhány jellemző módját ismerteti.

Animáció Leírás
Görgetés Animációval olyan funkciókat adhat hozzá, mint a fizika által emuláló lendület egy görgethető lista vezérlőelemhez.
Jelenetáttűnések Animációval olyan navigációs jelenetátmeneteket hozhat létre, amelyek folytonosságot biztosítanak a munkafolyamat tevékenységei között. A navigációs jelenetváltások olyan környezetet biztosítanak, amely megmutatja a felhasználónak, hogy hol volt, hol van, és hová kell mennie.
Ablakközi interakciók A különböző alkalmazások felhasználói felületi elemeinek animálása oly módon, hogy zökkenőmentes folytonosságot biztosítson közöttük, hogy segítsen a felhasználónak elvégezni az egyik alkalmazásról a másikra váltást igénylő feladatokat.

 

Animálható tulajdonságok

A DirectComposition alkalmazásban úgy animálhat egy vizualizációt, hogy animációt alkalmaz a vizualizációt meghatározó objektumok egyedi tulajdonságaira. Ha például vízszintesen szeretne áthelyezni egy vizualizációt a képernyőn, animációt alkalmazhat a vizualizáció OffsetX tulajdonságára. Hasonlóképpen, ha egy vizualizáció egyszerű animált 2D forgatását szeretné elvégezni, akkor animációt alkalmazna egy 2D átalakító objektum Szög tulajdonságára, majd alkalmazza a 2D átalakító objektumot a vizualizáció Átalakítás tulajdonságára.

A DirectComposition lehetővé teszi, hogy animációt alkalmazzon minden olyan objektumtulajdonságra, amely skaláris értéket használ. Egyidejű animációkat több tulajdonságra és több objektumra is alkalmazhat.

A DirectComposition külön szálon futtat animációkat. Elindíthat egy animációt vagy animációkészletet, majd más műveleteket végezhet az alkalmazásszálakon, vagy akár alvó üzemmódba helyezheti a szálakat, miközben a kompozíciós motor a megfelelő képkockasebességen futtatja az animációkat.

Animációs függvények

A DirectComposition egy ön által definiált animációs függvény alapján animál egy objektumtulajdonságot. Az animációs függvény egy olyan szerkezet, amely meghatározza, hogyan változik egy objektumtulajdonság értéke egy adott időszakban. Megadhat például egy animációs függvényt, amely egy tulajdonság értékét 4 másodperc alatt 1-ről 360-ra módosítja. Ezután, ha az animációs függvényt egy 2D forgatási átalakítási objektum Szög tulajdonságára alkalmazza, majd alkalmazza az átalakító objektumot egy vizualizáció Átalakítás tulajdonságára, az animációs függvény 4 másodperc alatt teljes körben elforgatja a vizualizációt.

Az animációs függvényeket az IDCompositionDevice::CreateAnimation metódus hívása által létrehozott animációs objektum jelöli. Animációs függvényt az animációs objektum IDCompositionAnimation felületének metódusával hozhat létre, hogy animációs szegmenseketegyenként hozzáfűzni az animációs függvényt meghatározó tömbhöz. Szegmens hozzáfűzésekor nulla alapú eltolást kell megadnia, amely a szegmens kezdő időpontját jelöli az animációs függvény elejéhez képest. Az animációs szegmenseket a kezdési időpontok növekvő sorrendjében kell hozzáfűzni. Nem sikerül hozzáfűzni egy animációs szegmenst, amelynek kezdési ideje egy előző szegmens előtt vagy azzal egyenlő. Az animációs függvények meghatározott befejezési idővel rendelkezhetnek, amely azt jelzi, hogy mikor kell lezárni a függvényt.

Ha másként nincs megadva, egy animációs függvény akkor indul el, amikor a Desktop Window Manager (DWM) megkapja az animáció végrehajtására vonatkozó parancsot. Minden szegmens addig fut, amíg el nem éri a következő szegmens kezdő időpontját. A szegmensek közötti animált tulajdonságértékben bekövetkező nem folytonos változások különálló módosításoknak minősülnek.

Animációs függvényt alkalmazhat egy tulajdonságra úgy, hogy a tulajdonságértéket az animációs függvényt képviselő animációs objektum IDCompositionAnimation mutatójára állítja. Ugyanez az animációs objektum ugyanazon objektum több tulajdonságára, valamint az ugyanazon eszköz által létrehozott más objektumok tulajdonságaira is alkalmazható.

Animációs szegmensek

Az animációs szegmensek az animációs függvények alapvető időzítési definíciói; ezek azok a primitívek, amelyekből összetettebb és magasabb szintű animációs függvények épülnek fel. Az animációs szegmensek olyan paraméterek sorozatából épülnek fel, amelyek a függvényt és a szegmens kezdetének időpontját írják le az animációs függvény elejéhez képest. Minden szegmensnél az idő (t) a vízszintes tengely mentén halad, és t = 0-nál kezdődik.

Köbszegmens

A köbszegmens időzítését egy köb polinom határozza meg. Egy adott időbemenet (t) esetén a kimeneti értéket a következő egyenlet adja meg:

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

Az alábbi ábrán egy két köbszegmensből álló animációs függvény látható. Az első szegmens 4 másodperc alatt 0-ról 16-ra vált át, a második pedig lineárisan 16-ról 0-ra módosítja az értéket a következő 4 másodpercben. Az első átmenet a köb polinom mentén történik:

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

és a második áttűnés a következő mentén következik be:

x(t) = - 4t + 16

két köbszegmensből álló animációs függvény diagramja

A IDCompositionAnimation::AddCubic metódussal köbszegmenst adhat hozzá egy animációs függvényhez.

Szinuszos szegmens

Egy szinuszos szegmens időzítését a következő egyenlet határozza meg:

x(t) = Torzítás + Amplitúdó * sin(t*Gyakorisági*2*PI + fázis*PI/180.0)

Szinuszos szegmenst adhat hozzá egy animációs függvényhez az IDCompositionAnimation::AddSinusoidal metódussal.

Szegmens ismétlése

Az ismétlési szegmens egy animációs függvény megadott előző részét ismétli meg. Az ismétlési szegmens hatására az animációs függvény megadott része határozatlan ideig ismétlődik, amíg a következő szegmens nem jelenik meg, vagy el nem éri az animáció megadott végét. Az animáció előző része más szegmensből áll, beleértve az egyéb ismétlődő szegmenseket is. Az ismétlési szegmens nem használható animációs függvény első szegmenseként.

Az alábbi ábrán egy animációs függvény látható, amely két, egyenként 4 másodperc időtartamú köbszegmensből áll, majd egy 12 másodpercig tartó ismétlődő szegmens. Az ismétlési szegmens 8 másodperccel kezdődik az animációban, és kétszer megismétli az animáció előző 6 másodpercét, amíg a záró szegmens 20 másodpercen belül el nem éri.

két köbszegmenst és egy ismétlődő szegmenst tartalmazó animációs függvény diagramja

Ha ismétlődő szegmenst szeretne hozzáadni egy animációs függvényhez, használja az IDCompositionAnimation::AddRepeat metódust.

Szegmens vége

Miután szegmensekből hoz létre animációs függvényt, hozzáfűzhet egy záró szegmenst, hogy az animációs függvény egy adott időpontban befejeződjön. Ha nem fűz hozzá záró szegmenst, az animációs függvény utolsó szegmense határozatlan ideig fut.

A IDCompositionAnimation::End metódus meghívásával hozzáfűzhet egy végpontot az animációs függvény elejétől, amely a függvény végpontját jelzi. Az eltolásnak nagyobbnak kell lennie, mint az előző szegmens kezdő eltolása. A végszegmens nem használható az animációs függvények első primitív elemeként.

A Endhívásakor az animált tulajdonság végleges értékét is meg kell adnia. A tulajdonság az animációs függvény végpontjának elérésekor megadott végső értékre van állítva.

A végszegmens hozzáfűzése után nem fűzhet hozzá más szegmenseket az animációs függvényhez. Vagyis az animációs objektum összes metódushívása meghiúsul, kivéve IDCompositionAnimation::Reset. Az alaphelyzetbe állításának meghívása az animációs objektumot olyan tiszta állapotba adja vissza, amelyben az animációs függvény nem tartalmaz szegmenseket, ekkor ismét hozzáadhat szegmenseket.

Kompatibilitás a Windows Animation Managerrel

A Windows Animation Manager (Windows Animation) a DirectComposition API-val kompatibilis formátumban adja ki az animációs primitíveket. Ez azt jelenti, hogy a DirectComposition a Windows Animation által létrehozott animációs primitívek alapján hozhat létre animációkat.

További információ: Windows Animation Manager, a IUIAnimationVariable2::GetCurve metódus, és DirectComposition Animation kezelése a Windows Animation Manager v2.

DirectComposition-fogalmak