Animation (DirectComposition)

Remarque

Pour les applications sur Windows 10, nous vous recommandons d’utiliser Windows. UI. API de composition au lieu de DirectComposition. Pour plus d’informations, consultez Moderniser votre application de bureau à l’aide de la couche Visuelle.

Cette rubrique décrit les principes de base de l’animation Microsoft DirectComposition. Elle contient les rubriques suivantes :

Qu’est-ce qu’une animation ?

L’animation est une illusion optique créée en apportant rapidement des modifications incrémentielles à un visuel pendant une période de temps tout en redessinant le visuel après chaque modification. Étant donné que les redessinations se produisent rapidement, le cerveau perçoit les changements incrémentiels comme une seule scène de changement, comme dans un film ou une vidéo d’action en direct.

Le tableau suivant décrit certaines des méthodes classiques d’utilisation de l’animation.

Animation Description
Défilement Utilisez l’animation pour ajouter des fonctionnalités telles que l’élan de simulation physique à un contrôle de liste de défilement.
Transitions de scène Utilisez l’animation pour créer des transitions de scène de navigation qui fournissent une continuité entre les tâches d’un flux de travail. Les transitions de scène de navigation fournissent un contexte qui montre à l’utilisateur où ils ont été, où ils sont et où ils doivent aller ensuite.
Interactions entre fenêtres Animer des éléments d’interface utilisateur de différentes applications d’une manière qui donne la perception de la continuité transparente entre elles pour aider l’utilisateur à effectuer des tâches qui impliquent de passer d’une application à une autre.

 

Propriétés pouvant être animées

Dans DirectComposition, vous animez un visuel en appliquant une animation à des propriétés individuelles des objets qui définissent le visuel. Par exemple, si vous souhaitez déplacer un visuel horizontalement sur l’écran, vous devez appliquer l’animation à la propriété OffsetX du visuel. De même, si vous vouliez effectuer une rotation 2D animée simple d’un visuel, vous appliqueriez l’animation à la propriété Angle d’un objet de transformation 2D, puis appliquez l’objet de transformation 2D à la propriété Transform du visuel.

DirectComposition vous permet d’appliquer l’animation à toute propriété d’objet qui prend une valeur scalaire. Vous pouvez appliquer des animations simultanées à plusieurs propriétés et plusieurs objets.

DirectComposition exécute des animations sur un thread distinct. Vous pouvez démarrer une animation ou un ensemble d’animations, puis effectuer d’autres tâches sur vos threads d’application, ou même mettre des threads en veille, tandis que le moteur de composition exécute les animations à la fréquence d’images appropriée.

Fonctions d’animation

DirectComposition anime une propriété d’objet basée sur une fonction d’animation que vous définissez. Une fonction d’animation est une construction qui spécifie la façon dont la valeur d’une propriété d’objet change sur une période donnée. Par exemple, vous pouvez définir une fonction d’animation qui change la valeur d’une propriété de 1 à 360 au cours de 4 secondes. Ensuite, si vous appliquez la fonction d’animation à la propriété Angle d’un objet de transformation 2D, puis appliquez l’objet de transformation à la propriété Transform d’un visuel, la fonction d’animation pivoterait le visuel dans un cercle complet au cours de 4 secondes.

Une fonction d’animation est représentée par un objet d’animation créé par un appel à la méthode IDCompositionDevice::CreateAnimation . Vous créez une fonction d’animation à l’aide des méthodes de l’interface IDCompositionAnimation d’un objet d’animation pour ajouter des segments d’animation, un à la fois, au tableau qui définit la fonction d’animation. Lors de l’ajout d’un segment, vous spécifiez un décalage basé sur zéro qui marque l’heure de début du segment, par rapport au début de la fonction d’animation. Les segments d’animation doivent être ajoutés dans l’ordre croissant des heures de début. La tentative d’ajout d’un segment d’animation dont l’heure de début est antérieure ou égale à un segment précédent échoue. Une fonction d’animation peut avoir une heure de fin spécifiée, indiquant quand la fonction doit conclure.

Sauf indication contraire, une fonction d’animation démarre lorsque le Gestionnaire de fenêtres de bureau (DWM) reçoit la commande pour exécuter l’animation. Chaque segment s’exécute jusqu’au début du segment suivant. Toutes les modifications discontinues qui se produisent dans la valeur de propriété animée entre les segments sont considérées comme des modifications discrètes.

Vous appliquez une fonction d’animation à une propriété en définissant la valeur de la propriété sur le pointeur IDCompositionAnimation de l’objet animation qui représente la fonction d’animation. Le même objet d’animation peut être appliqué à plusieurs propriétés du même objet, ainsi qu’aux propriétés d’autres objets créés par le même appareil.

Segments d’animation

Les segments d’animation sont les définitions de minutage fondamentales d’une fonction d’animation; il s’agit des primitives à partir desquelles les fonctions d’animation de niveau plus complexe et de niveau supérieur sont générées. Un segment d’animation est construit à partir d’une série de paramètres qui décrivent la fonction et l’heure à laquelle le segment commence, par rapport au début de la fonction d’animation. Pour chaque segment, le temps (t) progresse le long de l’axe horizontal et commence à t = 0.

Segment cube

Le minutage d’un segment cube est défini par un polynomial cube. Pour une entrée de temps donnée (t), la valeur de sortie est donnée par l’équation suivante :

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

Le diagramme suivant montre une fonction d’animation qui contient deux segments cubes. Le premier segment passe d’une valeur de 0 à 16 sur 4 secondes, et le second change la valeur linéairement de 16 à 0 au cours des 4 secondes suivantes. La première transition se produit le long de ce polynomial cube :

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

et la deuxième transition se produit le long de celui-ci :

x(t) = - 4t + 16

diagram of an animation function with two cubic segments

Vous ajoutez un segment cube à une fonction d’animation à l’aide de la méthode IDCompositionAnimation::AddCubic .

Segment sinusoïde

Le minutage d’un segment sinusoïde est défini par l’équation suivante :

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

Vous ajoutez un segment sinusoïde à une fonction d’animation à l’aide de la méthode IDCompositionAnimation::AddSinusoidal .

Répéter le segment

Un segment répétitif répète une partie précédente spécifiée d’une fonction d’animation. Un segment répétitif entraîne la boucle de la partie spécifiée de la fonction d’animation jusqu’à ce que le segment suivant soit rencontré ou que la fin spécifiée de l’animation soit atteinte. La partie précédente d’une animation est constituée d’autres segments, y compris d’autres segments de répétition. Un segment de répétition ne peut pas être utilisé comme premier segment dans une fonction d’animation.

Le diagramme suivant montre une fonction d’animation qui se compose de deux segments cubes de 4 secondes chacune, suivi d’un segment répétitif qui dure 12 secondes. Le segment de répétition commence 8 secondes dans l’animation et répète les 6 secondes précédentes de l’animation deux fois jusqu’à ce que le segment de fin soit atteint à 20 secondes.

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

Pour ajouter un segment répété à une fonction d’animation, utilisez la méthode IDCompositionAnimation::AddRepeat .

Segment final

Après avoir construit une fonction d’animation à partir de segments, vous pouvez ajouter un segment de fin pour que la fonction d’animation se termine à un moment donné. Si vous n’ajoutez pas de segment de fin, le segment final de la fonction d’animation s’exécute indéfiniment.

Vous ajoutez un segment de fin en appelant la méthode IDCompositionAnimation::End , en spécifiant un décalage du début de la fonction d’animation qui indique le point de terminaison de la fonction. Le décalage doit être supérieur au décalage de début du segment précédent. En outre, un segment de fin ne peut pas être utilisé comme première primitive dans une fonction d’animation.

Lorsque vous appelez End, vous spécifiez également une valeur finale pour la propriété animée. La propriété est définie sur la valeur finale spécifiée au moment où le point de fin de la fonction d’animation est atteint.

Après avoir ajouté un segment de fin, vous ne pouvez pas ajouter d’autres segments à la fonction d’animation. Autrement dit, tous les appels de méthode sur l’objet d’animation échouent à l’exception d’IDCompositionAnimation::Reset. La réinitialisation d’appel renvoie l’objet d’animation à l’état propre dans lequel la fonction d’animation ne contient aucun segment, à quel moment vous pouvez à nouveau ajouter des segments.

Compatibilité avec Windows Gestionnaire d’animations

Windows Animation Manager (Windows Animation) génère des primitives d’animation dans un format compatible avec l’API DirectComposition. Cela signifie que DirectComposition peut créer des animations basées sur des primitives d’animation créées par Windows Animation.

Pour plus d’informations, consultez Windows Gestionnaire d’animations, la méthode IUIAnimationVariable2::GetCurve et La gestion de l’animation DirectComposition avec Windows Animation Manager v2.

DirectComposition Concepts