创建情节提要并添加切换效果

若要创建动画,应用程序必须构造情节提要。

概述

构造情节提要的一般步骤如下:

  1. 创建情节提要
  2. 创建一个或多个转换
  3. 将过渡添加到情节提要,并指定它们进行动画处理的变量

可以使用动画管理器创建空情节提要。 应用程序必须使用过渡填充每个情节提要。 每个转换指定单个动画变量在给定时间间隔内的变化方式。 可以使用 Windows 动画中包含的过渡库组件创建过渡。 或者,应用程序可以创建自己的自定义转换或使用来自第三方的转换库。 当应用程序将过渡添加到情节提要时,它将指定切换将动画处理的动画变量。

情节提要可能包含一个或多个动画变量的切换效果。 更复杂的情节提要可以使用关键帧来同步切换的开始或结束,或者指定情节提要中应重复 (固定次数或无限期) 的部分。

示例代码

以下示例代码取自 Windows 动画示例 计时器驱动动画中的 MainWindow.cpp;请参阅 CMainWindow::ChangeColor 方法。 此示例使用 IUIAnimationManager::CreateStoryboard 方法 (步骤 1) 创建情节提要, 使用 IUIAnimationTransitionLibrary::CreateAccelerateDecelerateTransition 方法创建步骤 2) (转换,并使用 IUIAnimationStoryboard::AddTransition 方法将转换 (添加到步骤 3) 情节提要。

const UI_ANIMATION_SECONDS DURATION = 0.5;
const DOUBLE ACCELERATION_RATIO = 0.5;
const DOUBLE DECELERATION_RATIO = 0.5;

// Create a storyboard

IUIAnimationStoryboard *pStoryboard = NULL;
HRESULT hr = m_pAnimationManager->CreateStoryboard(
    &pStoryboard
    );
if (SUCCEEDED(hr))
{
    // Create transitions for the RGB animation variables

    IUIAnimationTransition *pTransitionRed;
    hr = m_pTransitionLibrary->CreateAccelerateDecelerateTransition(
        DURATION,
        red,
        ACCELERATION_RATIO,
        DECELERATION_RATIO,
        &pTransitionRed
        );
    if (SUCCEEDED(hr))
    {
        IUIAnimationTransition *pTransitionGreen;
        hr = m_pTransitionLibrary->CreateAccelerateDecelerateTransition(
            DURATION,
            green,
            ACCELERATION_RATIO,
            DECELERATION_RATIO,
            &pTransitionGreen
            );
        if (SUCCEEDED(hr))
        {
            IUIAnimationTransition *pTransitionBlue;
            hr = m_pTransitionLibrary->CreateAccelerateDecelerateTransition(
                DURATION,
                blue,
                ACCELERATION_RATIO,
                DECELERATION_RATIO,
                &pTransitionBlue
                );
            if (SUCCEEDED(hr))
            {
                // Add transitions to the storyboard

                hr = pStoryboard->AddTransition(
                    m_pAnimationVariableRed,
                    pTransitionRed
                    );
                if (SUCCEEDED(hr))
                {
                    hr = pStoryboard->AddTransition(
                        m_pAnimationVariableGreen,
                        pTransitionGreen
                        );
                    if (SUCCEEDED(hr))
                    {
                        hr = pStoryboard->AddTransition(
                            m_pAnimationVariableBlue,
                            pTransitionBlue
                            );
                        if (SUCCEEDED(hr))
                        {
                            // Get the current time and schedule the storyboard for play

                            ...

}

上一步

在开始此步骤之前,应已完成此步骤: 读取动画变量值

下一步

完成此步骤后,下一步是: 计划情节提要

IUIAnimationManager::CreateStoryboard

IUIAnimationStoryboard::AddTransition

IUIAnimationTransitionLibrary::CreateAccelerateDecelerateTransition

情节提要概述