Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Notitie
Voor apps in Windows 10 wordt u aangeraden Windows.UI.Composition-API's te gebruiken in plaats van DirectComposition. Zie Uw bureaublad-app moderniseren met behulp van de visuallaagvoor meer informatie.
In dit onderwerp worden de basisbeginselen van Microsoft DirectComposition-animatie besproken. Het bevat de volgende onderwerpen:
- Wat is een animatie?
- Eigenschappen die kunnen worden geanimeerde
- Animatiefuncties
- Animatiesegmenten
- compatibiliteit met Windows Animatiebeheer
- Verwante onderwerpen
Wat is een animatie?
Animatie is een optische illusie die wordt gecreëerd door snel incrementele wijzigingen aan te brengen in een visual gedurende een bepaalde periode tijdens het opnieuw tekenen van de visual nadat elke wijziging is aangebracht. Omdat de hertekeningen snel plaatsvinden, ziet het brein de incrementele veranderingen als één veranderende scène, net als in een film of video van live-actie.
In de volgende tabel worden enkele van de gebruikelijke manieren beschreven voor het gebruik van animatie.
| Animatie | Beschrijving |
|---|---|
| Scrollen | Gebruik animatie om functies zoals fysica-emulerend momentum toe te voegen aan een besturingselement voor een schuiflijst. |
| Scèneovergangen | Gebruik animatie om navigatiescèneovergangen te maken die continuïteit bieden tussen taken in een werkstroom. Overgangen van navigatiescènes bieden context waarin de gebruiker wordt weergegeven waar ze zijn geweest, waar ze zich bevinden en waar ze naartoe moeten gaan. |
| Interacties tussen vensters | Animate UI-elementen van verschillende toepassingen op een manier die de perceptie van naadloze continuïteit tussen deze toepassingen biedt om de gebruiker te helpen taken te voltooien waarbij van de ene toepassing naar de andere wordt overgeschakeld. |
Eigenschappen die kunnen worden geanimeerd
In DirectComposition kunt u een visual animeren door animatie toe te passen op afzonderlijke eigenschappen van de objecten die de visual definiëren. Als u bijvoorbeeld een visual horizontaal over het scherm wilt verplaatsen, past u animatie toe op de eigenschap OffsetX van de visual. Als u een eenvoudige 2D-draaiing van een visual met animatie wilt uitvoeren, past u animatie toe op de eigenschap Hoek van een 2D-transformatieobject en past u vervolgens het 2D-transformatieobject toe op de eigenschap Transformeren van de visual.
Met DirectComposition kunt u animatie toepassen op een objecteigenschap die een scalaire waarde gebruikt. U kunt gelijktijdige animaties toepassen op meerdere eigenschappen en meerdere objecten.
DirectComposition voert animaties uit op een afzonderlijke thread. U kunt een animatie of set animaties starten en vervolgens andere werkzaamheden uitvoeren op uw toepassingsthreads of zelfs threads in de slaapstand plaatsen, terwijl de samenstellingsengine de animaties uitvoert met de juiste framesnelheid.
Animatiefuncties
DirectComposition geeft een objecteigenschap een animatie op basis van een animatiefunctie die u definieert. Een animatiefunctie is een constructie die aangeeft hoe de waarde van een objecteigenschap gedurende een bepaalde periode verandert. U kunt bijvoorbeeld een animatiefunctie definiëren waarmee de waarde van een eigenschap wordt gewijzigd van 1 tot 360 in de loop van 4 seconden. Als u vervolgens de animatiefunctie toepast op de eigenschap Hoek van een 2D-transformatieobject en vervolgens het transformatieobject toepast op de eigenschap Transformeren van een visual, draait de animatiefunctie de visual gedurende 4 seconden in een volledige cirkel.
Een animatiefunctie wordt vertegenwoordigd door een animatieobject gemaakt door een aanroep naar de methode IDCompositionDevice::CreateAnimation. U maakt een animatiefunctie met behulp van de methoden van de interface IDCompositionAnimation van een animatieobject om animatiesegmenten toe te voegen, één voor één, aan de matrix waarmee de animatiefunctie wordt gedefinieerd. Wanneer u een segment toevoegt, geeft u een offset op basis van nul op die de begintijd van het segment markeert ten opzichte van het begin van de animatiefunctie. Animatiesegmenten moeten worden toegevoegd in oplopende volgorde van begintijden. Als u een animatiesegment wilt toevoegen waarvan de begintijd vóór of gelijk is aan een eerder segment, mislukt dit. Een animatiefunctie kan een opgegeven eindtijd hebben, waarmee wordt aangegeven wanneer de functie moet worden afgesloten.
Tenzij anders opgegeven, wordt een animatiefunctie gestart wanneer de Desktop Window Manager (DWM) de opdracht ontvangt om de animatie uit te voeren. Elk segment wordt uitgevoerd totdat de begintijd van het volgende segment is bereikt. Eventuele niet-aaneengeslagen wijzigingen in de waarde van de eigenschap met animatie tussen segmenten worden beschouwd als discrete wijzigingen.
U past een animatiefunctie toe op een eigenschap door de eigenschapswaarde in te stellen op de IDCompositionAnimation aanwijzer van het animatieobject dat de animatiefunctie vertegenwoordigt. Hetzelfde animatieobject kan worden toegepast op meerdere eigenschappen van hetzelfde object, evenals op de eigenschappen van andere objecten die door hetzelfde apparaat zijn gemaakt.
Animatiesegmenten
Animatiesegmenten zijn de fundamentele tijdsdefinities van een animatiefunctie; ze zijn de primitieven waaruit complexere en hogere animatiefuncties worden gebouwd. Een animatiesegment wordt samengesteld uit een reeks parameters die de functie beschrijven en het tijdstip waarop het segment begint, ten opzichte van het begin van de animatiefunctie. Voor elk segment wordt de tijd (t) langs de horizontale as voortgezet en begint bij t = 0.
Kubieke segment
De timing van een kubieke segment wordt gedefinieerd door een kubieke polynomiaal. Voor een bepaalde tijdinvoer (t), wordt de uitvoerwaarde gegeven door de volgende vergelijking:
x(t) = op³ + bt² + ct + d
In het volgende diagram ziet u een animatiefunctie met twee kubieke segmenten. In het eerste segment wordt een waarde van 0 naar 16 over 4 seconden overgeschakeld en wordt de waarde lineair gewijzigd van 16 naar 0 in de komende 4 seconden. De eerste overgang vindt plaats op deze kubieke polynomiale:
x(t) = t³ - 6t² + 12t
en de tweede overgang vindt plaats in deze:
x(t) = - 4t + 16
U voegt een kubieke segment toe aan een animatiefunctie met behulp van de methode IDCompositionAnimation::AddCubic.
Sinusvormig segment
De timing van een sinusoïde segment wordt gedefinieerd door de volgende vergelijking:
x(t) = + Amplitude * sin(t*Frequency*2*PI + Phase*PI/180,0)
U voegt een sinusvormig segment toe aan een animatiefunctie met behulp van de methode IDCompositionAnimation::AddSinusoidal methode.
Segment herhalen
Een herhalingssegment herhaalt een opgegeven voorgaande gedeelte van een animatiefunctie. Een herhalend segment zorgt ervoor dat het opgegeven gedeelte van de animatiefunctie voor onbepaalde tijd wordt herhaald totdat het volgende segment wordt aangetroffen of het opgegeven einde van de animatie wordt bereikt. Het voorgaande gedeelte van een animatie is gemaakt van andere segmenten, inclusief andere herhalingssegmenten. Een herhalingssegment kan niet worden gebruikt als het eerste segment in een animatiefunctie.
In het volgende diagram ziet u een animatiefunctie die uit twee kubieke segmenten van 4 seconden bestaat, gevolgd door een herhalingssegment dat 12 seconden duurt. Het herhalingssegment begint 8 seconden in de animatie en herhaalt de vorige 6 seconden van de animatie twee keer totdat het eindsegment op 20 seconden is bereikt.
Als u een herhalend segment wilt toevoegen aan een animatiefunctie, gebruikt u de methode IDCompositionAnimation::AddRepeat.
Eindsegment
Nadat u een animatiefunctie hebt gemaakt op basis van segmenten, kunt u een eindsegment toevoegen om ervoor te zorgen dat de animatiefunctie op een bepaald moment eindigt. Als u geen eindsegment toevoegt, wordt het laatste segment van de animatiefunctie voor onbepaalde tijd uitgevoerd.
U voegt een eindsegment toe door de methode IDCompositionAnimation::End aan te roepen, waarbij een verschuiving wordt opgegeven vanaf het begin van de animatiefunctie die het eindpunt van de functie aangeeft. De offset moet groter zijn dan de begin offset van het voorgaande segment. Een eindsegment kan ook niet worden gebruikt als de eerste primitieve in een animatiefunctie.
Wanneer u Endaanroept, geeft u ook een uiteindelijke waarde op voor de eigenschap die wordt geanimeerd. De eigenschap is ingesteld op de opgegeven eindwaarde op het moment dat het eindpunt van de animatiefunctie is bereikt.
Nadat u een eindsegment hebt toegevoegd, kunt u geen andere segmenten toevoegen aan de animatiefunctie. Dat wil wel dat alle methodeaanroepen op het animatieobject mislukken, behalve IDCompositionAnimation::Reset. Als u opnieuw instellen aanroept, wordt het animatieobject geretourneerd om de status op te schonen waarin de animatiefunctie geen segmenten bevat, waarna u opnieuw segmenten kunt toevoegen.
Compatibiliteit met Windows Animatiebeheer
Met Windows Animatiebeheer (Windows Animatie) worden animatieprimitief uitgevoerd in een indeling die compatibel is met de DirectComposition-API. Dit betekent dat DirectComposition animaties kan maken op basis van animatie-primitieven die door Windows Animatie zijn gemaakt.
Zie Windows Animatiebeheer, de methode IUIAnimationVariable2::GetCurve en DirectCompositie-animatie beheren met Windows Animation Manager v2voor meer informatie.
Verwante onderwerpen