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


Создание раскадровки и добавление переходов

Чтобы создать анимацию, приложение должно создать раскадровки.

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

Ниже приведены общие шаги по созданию раскадровки.

  1. Создание раскадровки
  2. Создание одного или нескольких переходов
  3. Добавьте переходы в раскадровку, указав, какие переменные они анимируют.

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

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

Пример кода

Следующий пример кода взят из MainWindow.cpp в примере анимации Windows на основе таймера. см. метод CMainWindow::ChangeColor. В этом примере создается раскадровка (шаг 1) с помощью метода IUIAnimationManager::CreateStoryboard , создаются переходы (шаг 2) с помощью метода IUIAnimationTransitionLibrary::CreateAccelerateDecelerateTransition , а переходы добавляются в раскадровки (шаг 3) с помощью метода IUIAnimationStoryboard::AddTransition .

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

Общие сведения о раскадровки