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


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

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

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

При рисовании кадра приложение может использовать метод 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 На основе таймера. см. метод CMainWindow::D rawBackground. Он использует метод 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