Создание переменных анимации
Приложение должно создать переменную анимации для каждой визуальной характеристики, которая должна быть анимирована с помощью анимации Windows Animation.
Обзор
Переменные анимации создаются с помощью диспетчера анимации, и приложение должно хранить ссылку на каждую из них до тех пор, пока это необходимо. Приложение обычно создает каждую переменную анимации одновременно с визуальным объектом, который он анимирует.
При создании переменной анимации необходимо указать начальное значение. После этого его значение можно изменить только путем назначения раскадровок, анимирующих его.
Переменные анимации передаются в качестве параметров при создании раскадровок, поэтому приложение не должно выпускать их до тех пор, пока визуальные характеристики, которые они олицетворяют, больше не нужно анимировать, как правило, когда связанные визуальные объекты будут уничтожены.
Пример кода
Анимация цветов
Следующий пример кода взят из MainWindow.cpp в примерах анимации Windows Application-Driven анимации и Timer-Driven анимации. В примере создаются три переменные анимации с помощью 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
);
...
}
Предыдущий шаг
Перед началом этого шага необходимо выполнить этот шаг: создать основные объекты анимации.
Следующий шаг
После выполнения этого шага следующим шагом будет: обновить диспетчер анимации иотрисовать кадры.
Связанные разделы