Animation (DirectComposition)

Hinweis

Für Apps auf Windows 10 empfehlen wir die Verwendung Windows. BENUTZEROBERFLÄCHE. Kompositions-APIs anstelle von DirectComposition. Weitere Informationen finden Sie unter Modernisieren Ihrer Desktop-App mithilfe der visuellen Ebene.

In diesem Thema werden die Grundlagen der Microsoft DirectComposition-Animation erläutert. Die Lektion enthält die folgenden Themen:

Was ist eine Animation?

Animation ist eine optische Illusion, die durch schnelle inkrementelle Änderungen an einem visuellen Zeitraum erstellt wird, während das Visuelle nach jeder Änderung neu gedreht wird. Da die Redraws schnell auftreten, nimmt das Gehirn die inkrementellen Änderungen als einzelne Änderungsszene wahr, genauso wie in einem Film oder Video von Live-Action.

In der folgenden Tabelle werden einige der typischen Möglichkeiten der Verwendung von Animation beschrieben.

Animation BESCHREIBUNG
Scrollen Verwenden Sie Animation, um Features wie Physik-Emulation von Dynamik zu einem Bildlauflistensteuerelement hinzuzufügen.
Szenenübergänge Verwenden Sie Animation zum Erstellen von Navigationsszeneübergängen, die Kontinuität zwischen Vorgängen in einem Workflow bieten. Navigationsszeneübergänge bieten Kontext, der den Benutzer zeigt, wo sie waren, wo sie sind und wo sie weitergehen müssen.
Fensterübergreifende Interaktionen Animieren Von UI-Elementen verschiedener Anwendungen auf eine Weise, die die Wahrnehmung der nahtlosen Kontinuität zwischen ihnen ermöglicht, um den Benutzer bei der Durchführung von Aufgaben zu unterstützen, die das Wechseln von einer Anwendung zu einer anderen erfordern.

 

Eigenschaften, die animiert werden können

In DirectComposition animieren Sie eine visuelle Animation, indem Sie animationen auf einzelne Eigenschaften der Objekte anwenden, die das Visuelle definieren. Wenn Sie beispielsweise eine visuelle horizontale Verschiebung auf dem Bildschirm ausführen möchten, würden Sie Animationen auf die OffsetX-Eigenschaft des visuellen Objekts anwenden. Wenn Sie eine einfache animierte 2D-Drehung einer Visuellen ausführen möchten, würden Sie animationen auf die Angle-Eigenschaft eines 2D-Transformationsobjekts anwenden und dann das 2D-Transformationsobjekt auf die Transform-Eigenschaft des visuellen Objekts anwenden.

DirectComposition ermöglicht es Ihnen, Animationen auf jede Objekteigenschaft anzuwenden, die einen Skalarwert verwendet. Sie können gleichzeitige Animationen auf mehrere Eigenschaften und mehrere Objekte anwenden.

DirectComposition führt Animationen auf einem separaten Thread aus. Sie können eine Animation oder eine Reihe von Animationen starten und dann andere Arbeiten an Ihren Anwendungsthreads ausführen oder Sogar Threads in den Schlaf setzen, während das Kompositionsmodul die Animationen bei der entsprechenden Framerate ausführt.

Animationsfunktionen

DirectComposition animiert eine Objekteigenschaft basierend auf einer Animationsfunktion, die Sie definieren. Eine Animationsfunktion ist ein Konstrukt, das angibt, wie sich der Wert einer Objekteigenschaft über einen Zeitraum ändert. Sie können beispielsweise eine Animationsfunktion definieren, die den Wert einer Eigenschaft von 1 bis 360 im Laufe von 4 Sekunden ändert. Wenn Sie dann die Animationsfunktion auf die Angle-Eigenschaft eines 2D-Drehtransformationsobjekts anwenden und dann das Transformationsobjekt auf die Transformationseigenschaft eines visuellen Objekts anwenden, würde die Animationsfunktion das Visuelle in einem vollständigen Kreis im Laufe von 4 Sekunden drehen.

Eine Animationsfunktion wird durch ein Animationsobjekt dargestellt, das von einem Aufruf der IDCompositionDevice::CreateAnimation-Methode erstellt wird. Sie erstellen eine Animationsfunktion mithilfe der Methoden der IDCompositionAnimation-Schnittstelle eines Animationsobjekts, um Animationssegmente gleichzeitig an das Array anzufügen, das die Animationsfunktion definiert. Wenn Sie ein Segment anfügen, geben Sie einen nullbasierten Offset an, der die Anfangszeit des Abschnitts im Verhältnis zum Anfang der Animationsfunktion markiert. Animationssegmente müssen in erhöhter Reihenfolge der Anfangszeiten angefügt werden. Beim Versuch, ein Animationssegment anzufügen, dessen Anfangszeit vor oder gleich einem vorherigen Segment liegt, schlägt fehl. Eine Animationsfunktion kann über eine angegebene Endzeit verfügen, die angibt, wann die Funktion abgeschlossen werden soll.

Sofern nicht anders angegeben, beginnt eine Animationsfunktion, wenn der DesktopFenster-Manager (DWM) den Befehl empfängt, um die Animation auszuführen. Jedes Segment wird bis zum Anfang des nächsten Segmentes ausgeführt. Alle in den animierten Eigenschaftenwerten zwischen Segmenten vorkommenden unauffälligen Änderungen werden als diskrete Änderungen angesehen.

Sie wenden eine Animationsfunktion auf eine Eigenschaft an, indem Sie den Eigenschaftswert auf den IDCompositionAnimation-Zeiger des Animationsobjekts festlegen, das die Animationsfunktion darstellt. Das gleiche Animationsobjekt kann auf mehrere Eigenschaften desselben Objekts sowie auf die Eigenschaften anderer Objekte angewendet werden, die von demselben Gerät erstellt wurden.

Animationssegmente

Animationssegmente sind die grundlegenden Timingdefinitionen einer Animationsfunktion; sie sind die Grundtypen, aus denen komplexere und höhere Animationsfunktionen erstellt werden. Ein Animationssegment wird aus einer Reihe von Parametern erstellt, die die Funktion beschreiben und die Uhrzeit, zu der das Segment beginnt, relativ zum Anfang der Animationsfunktion. Für jedes Segment wird die Zeit (t) entlang der horizontalen Achse weiter und beginnt bei t = 0.

Kubiksegment

Die Zeitdauer eines Kubiksegments wird durch ein kubisches Polynom definiert. Für eine bestimmte Zeiteingabe (t) wird der Ausgabewert durch die folgende Formel angegeben:

x(t) = at³ + bt² + ctd +

Das folgende Diagramm zeigt eine Animationsfunktion, die zwei kubische Segmente enthält. Das erste Segment übergibt einen Wert von 0 bis 16 über 4 Sekunden, und der zweite ändert den Wert linear von 16 bis 0 über die nächsten 4 Sekunden. Der erste Übergang tritt entlang dieses kubischen Polynoms auf:

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

und der zweite Übergang erfolgt entlang dieser:

x(t) = - 4t + 16

diagram of an animation function with two cubic segments

Mithilfe der IDCompositionAnimation::AddCubic-Methode fügen Sie einem Animationssegment ein kubisches Segment hinzu.

Sinusoidalsegment

Die Zeitdauer eines Sinusoidsegments wird durch die folgende Formel definiert:

x(t) = BiasAmplitude + * sin(tFrequency**2*PI + Phase*PI/180.0)

Mithilfe der IDCompositionAnimation::AddSinusoidal-Methode fügen Sie eine Sinussegment zu einer Animationsfunktion hinzu.

Wiederholen des Abschnitts

Ein wiederholtes Segment wiederholt einen angegebenen vorherigen Teil einer Animationsfunktion. Ein wiederholtes Segment bewirkt, dass der angegebene Teil der Animationsfunktion unbegrenzt schleifen kann, bis das nächste Segment aufgetreten ist oder das angegebene Ende der Animation erreicht ist. Der vorherige Teil einer Animation besteht aus anderen Segmenten, einschließlich anderer Wiederholungssegmente. Ein Wiederholungssegment kann nicht als erstes Segment in einer Animationsfunktion verwendet werden.

Das folgende Diagramm zeigt eine Animationsfunktion, die jeweils aus zwei kubischen Segmenten von 4 Sekunden Dauer besteht, gefolgt von einem Wiederholungssegment, das 12 Sekunden dauert. Das Wiederholungssegment beginnt 8 Sekunden in der Animation und wiederholt die vorherigen 6 Sekunden der Animation zweimal, bis das Endsegment bei 20 Sekunden erreicht wird.

diagram of an animation function that contains two cubic segments and one repeat segment

Verwenden Sie zum Hinzufügen eines Wiederholungssegments zu einer Animationsfunktion die IDCompositionAnimation::AddRepeat-Methode .

Endsegment

Nachdem Sie eine Animationsfunktion aus Segmenten erstellt haben, können Sie ein Endsegment anfügen, um die Animationsfunktion zu einem bestimmten Zeitpunkt zu beenden. Wenn Sie kein Endsegment anfügen, wird das endgültige Segment der Animationsfunktion unbegrenzt ausgeführt.

Sie fügen ein Endsegment an, indem Sie die IDCompositionAnimation::End-Methode aufrufen, die einen Offset vom Anfang der Animationsfunktion angibt, der den Endpunkt der Funktion angibt. Der Offset muss größer als der Anfangssatz des vorherigen Segments sein. Außerdem kann ein Endsegment nicht als erster Grundtyp in einer Animationsfunktion verwendet werden.

Wenn Sie End aufrufen, geben Sie auch einen endgültigen Wert für die animierte Eigenschaft an. Die Eigenschaft wird auf den angegebenen Endwert festgelegt, wenn der Endpunkt der Animationsfunktion erreicht wird.

Nach dem Anfügen eines Endsegments können Sie keine anderen Segmente an die Animationsfunktion anfügen. Das heißt, alle Methodenaufrufe des Animationsobjekts schlägt fehl, außer IDCompositionAnimation::Reset. Beim Aufrufen des Zurücksetzens wird das Animationsobjekt auf den sauberen Zustand zurückgegeben, in dem die Animationsfunktion keine Segmente enthält, in denen Sie erneut Segmente hinzufügen können.

Kompatibilität mit Windows Animation Manager

Windows Animation Manager (Windows Animation) gibt Animationsgrundtypen in einem Format aus, das mit der DirectComposition-API kompatibel ist. Dies bedeutet, dass DirectComposition Animationen basierend auf Animationsgrundtypen erstellen kann, die von Windows Animation erstellt werden.

Weitere Informationen finden Sie unter Windows Animations-Manager, der IUIAnimationVariable2::GetCurve-Methode und dem Verwalten von DirectComposition-Animationen mit Windows Animation Manager v2.

DirectComposition-Konzepte