创建动画变量

应用程序必须为每个视觉特征创建动画变量,以便使用Windows动画进行动画处理。

概述

动画变量是使用动画管理器创建的,只要需要,应用程序应保留对每个变量的引用。 应用程序通常会在创建动画的视觉对象的同时创建每个动画变量。

创建动画变量时,必须指定其初始值。 此后,只能通过计划动画情节提要来更改其值。

构造情节提要时,动画变量作为参数传递,因此应用程序不应释放它们,直到它们表示的视觉特征不再需要进行动画处理,通常当关联的视觉对象即将被销毁时。

示例代码

对颜色进行动画处理

以下示例代码取自 Windows 动画示例 Application-Driven AnimationTimer-Driven Animation 中的 MainWindow.cpp。 在此示例中,使用 CreateAnimationVariable 创建三个动画变量来表示背景色。 该代码还使用 SetLowerBoundSetUpperBound 方法来控制动画变量的值。

const DOUBLE INITIAL_RED = COLOR_MAX;
const DOUBLE INITIAL_GREEN = COLOR_MAX;
const DOUBLE INITIAL_BLUE = COLOR_MAX;

HRESULT hr = m_pAnimationManager->CreateAnimationVariable(
    INITIAL_RED,
    &m_pAnimationVariableRed
    );
if (SUCCEEDED(hr))
{
    hr = m_pAnimationVariableRed->SetLowerBound(COLOR_MIN);
    if (SUCCEEDED(hr))
    {
        hr = m_pAnimationVariableRed->SetUpperBound(COLOR_MAX);
        if (SUCCEEDED(hr))
        {
            hr = m_pAnimationManager->CreateAnimationVariable(
                INITIAL_GREEN,
                &m_pAnimationVariableGreen
                );
            if (SUCCEEDED(hr))
            {
                hr = m_pAnimationVariableGreen->SetLowerBound(COLOR_MIN);
                if (SUCCEEDED(hr))
                {
                    hr = m_pAnimationVariableGreen->SetUpperBound(COLOR_MAX);
                    if (SUCCEEDED(hr))
                    {
                        hr = m_pAnimationManager->CreateAnimationVariable(
                            INITIAL_BLUE,
                            &m_pAnimationVariableBlue
                            );
                        if (SUCCEEDED(hr))
                        {
                            hr = m_pAnimationVariableBlue->SetLowerBound(COLOR_MIN);
                            if (SUCCEEDED(hr))
                            {
                                hr = m_pAnimationVariableBlue->SetUpperBound(COLOR_MAX);
                            }
                        }
                    }
                }
            }
        }
    }
}

请注意 MainWindow.h 中的以下定义。

class CMainWindow
{

    ...

private:

    // Animated Variables

    IUIAnimationVariable *m_pAnimationVariableRed;
    IUIAnimationVariable *m_pAnimationVariableGreen;
    IUIAnimationVariable *m_pAnimationVariableBlue;

    ...

};

对 x 和 y 坐标进行动画处理

以下示例代码取自 Windows 动画网格布局示例中的 Thumbnail.cpp;请参阅 CMainWindow::CreateAnimationVariables 方法。 创建两个动画变量来表示每个对象的 X 和 Y 坐标。

// Create the animation variables for the x and y coordinates

hr = m_pAnimationManager->CreateAnimationVariable(
    xInitial,
    &m_pAnimationVariableX
    );

if (SUCCEEDED(hr))
{
    hr = m_pAnimationManager->CreateAnimationVariable(
        yInitial,
        &m_pAnimationVariableY
        );

    ...

}

请注意 Thumbnail.h 中的以下定义。

class CThumbnail
{
public:

    ...

    // X and Y Animation Variables

    IUIAnimationVariable *m_pAnimationVariableX;
    IUIAnimationVariable *m_pAnimationVariableY;

    ...

};

动画变量是浮点数,但它们的值也可以作为整数提取。 默认情况下,每个值将舍入到最接近的整数,但可以替代用于变量的舍入模式。 以下示例代码使用 SetRoundingMode 方法指定值应始终向下舍入。

hr = m_pAnimationVariableX->SetRoundingMode(
    UI_ANIMATION_ROUNDING_MODE_FLOOR
    );
if (SUCCEEDED(hr))
{
    hr = m_pAnimationVariableY->SetRoundingMode(
        UI_ANIMATION_ROUNDING_MODE_FLOOR
        );

    ...

}

上一步

在开始此步骤之前,应已完成此步骤: 创建主动画对象

下一步

完成此步骤后,下一步是: 更新动画管理器和绘制帧

IUIAnimationManager::CreateAnimationVariable

IUIAnimationVariable::SetLowerBound

IUIAnimationVariable::SetRoundingMode

IUIAnimationVariable::SetUpperBound

Windows动画概述