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


Чтение значений переменной анимации

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

Обзор

При рисовании кадра приложение может использовать метод IUIAnimationVariable::GetValue или IUIAnimationVariable::GetIntegerValue для запроса значений любых переменных анимации, влияющих на визуальные элементы в кадре. Можно обрезать переменную анимации до диапазона значений (SetLowerBound и SetUpperBound), а также запросить его значение округления до целого числа с помощью указанной схемы округления (SetRoundingMode).

Вместо чтения значений всех переменных для каждого кадра приложение может использовать метод IUIAnimationVariable::SetVariableChangeHandler или метод IUIAnimationVariable::SetVariableIntegerChangeHandler для регистрации одного или нескольких обработчиков изменений переменных для получения уведомлений только при изменении значения переменных (IUIAnimationVariableChangeHandler::OnValueChanged) или округленного значения (IUIAnimationVariableIntegerChangeHandler::OnIntegerValueChanged). Чтобы определить переменные, передаваемые обработчикам изменений переменных, приложение может применять теги к переменным с помощью метода IUIAnimationVariable::SetTag. Это пары объектов (IUnknown*) и целых чисел, которые интерпретируются приложением.

Пример кода

Следующий пример кода взят из Thumbnail.cpp в примере анимации Windows макет сетки; см. метод CMainWindow::Render. Он использует метод GetValue для чтения значений в виде значений с плавающей запятой.

// Get the x-coordinate and y-coordinate animation variable values

DOUBLE x=0;
hr = m_pAnimationVariableX->GetValue(&x);
if (SUCCEEDED(hr))
{
    DOUBLE y=0;
    hr = m_pAnimationVariableY->GetValue(&y);
    if (SUCCEEDED(hr))
    {
        // Draw the object

        ...

    }
}

Следующий пример кода взят из MainWindow.cpp в примере анимации Windows Timer-Driven анимации; см. метод CMainWindow::DrawBackground. Он использует метод GetIntegerValue для чтения значений в виде целых значений.

// Get the RGB animation variable values

INT32 red;
HRESULT hr = m_pAnimationVariableRed->GetIntegerValue(
    &red
    );
if (SUCCEEDED(hr))
{
    INT32 green;
    hr = m_pAnimationVariableGreen->GetIntegerValue(
        &green
        );
    if (SUCCEEDED(hr))
    {
        INT32 blue;
        hr = m_pAnimationVariableBlue->GetIntegerValue(
            &blue
            );
        if (SUCCEEDED(hr))
        {
            // Set the RGB of the background brush to the new animated value

            ...
                
            // Paint the background

            ...

        }
    }

    ...

}

Предыдущий шаг

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

Следующий шаг

После выполнения этого шага выполните следующий шаг: создайте раскадровку и добавьте переходы.

IUIAnimationVariable::GetIntegerValue

IUIAnimationVariable::GetValue

Обзор анимации Windows