Поделиться через


Создание переменных анимации

Приложение должно создать переменную анимации для каждой визуальной характеристики, анимированной с помощью анимации Windows.

Общие сведения

Переменные анимации создаются с помощью диспетчера анимации, и приложение должно хранить ссылку на каждую из них до тех пор, пока это необходимо. Приложение обычно создает каждую переменную анимации одновременно с визуальным объектом, который оно анимирует.

При создании переменной анимации необходимо указать ее начальное значение. После этого его значение можно изменить только путем планирования раскадровки, которые его анимируют.

Переменные анимации передаются в качестве параметров при создании раскадровки, поэтому приложение не должно освобождать их до тех пор, пока визуальные характеристики, которые они представляют, больше не нужно анимировать, как правило, когда связанные визуальные объекты будут уничтожены.

Пример кода

Анимация цветов

Следующий пример кода взят из MainWindow.cpp в примерах анимации Windows На основе приложений и Анимация на основе таймера. В этом примере три переменные анимации создаются с помощью CreateAnimationVariable для представления цветов фона. Код также использует методы SetLowerBound и SetUpperBound для управления значением переменной анимации.

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

Следующий пример кода взят из Thumbnail.cpp в примере макета сетки анимации Windows. см. метод 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