Создание раскадровки и добавление переходов
Чтобы создать анимацию, приложение должно создать раскадровки.
Общие сведения
Ниже приведены общие шаги по созданию раскадровки.
- Создание раскадровки
- Создание одного или нескольких переходов
- Добавьте переходы в раскадровку, указав, какие переменные они анимируют.
С помощью диспетчера анимации можно создать пустую раскадровки. Приложение должно заполнять каждую раскадровки переходами. Каждый переход указывает, как изменяется одна переменная анимации в течение заданного интервала времени. Переходы можно создавать с помощью компонента библиотеки переходов, включенного в анимацию 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
...
}
Предыдущий шаг
Перед началом этого шага необходимо выполнить следующий шаг: Чтение значений переменной анимации.
Следующий шаг
После завершения этого шага следует запланировать раскадровки.
Связанные темы