Erstellen von Animationsvariablen
Eine Anwendung muss eine Animationsvariable für jedes visuelle Merkmal erstellen, das mit Windows Animation animiert werden soll.
Übersicht
Animationsvariablen werden mit dem Animations-Manager erstellt, und die Anwendung sollte einen Verweis auf jedes beibehalten, solange es benötigt wird. Ihre Anwendung erstellt im Allgemeinen jede Animationsvariable zur gleichen Zeit wie das visuelle Objekt, das sie animiert.
Wenn eine Animationsvariable erstellt wird, muss der Anfangswert angegeben werden. Danach kann der Wert nur durch die Planung von Storyboards geändert werden, die ihn animieren.
Animationsvariablen werden als Parameter übergeben, wenn Storyboards erstellt werden. Daher sollte die Anwendung sie erst freigeben, wenn die visuellen Merkmale, die sie darstellen, nicht mehr animiert werden müssen, in der Regel, wenn die zugeordneten visuellen Objekte zerstört werden.
Beispielcode
Animieren von Farben
Der folgende Beispielcode stammt aus MainWindow.cpp in den Beispielen Windows Animation Application-Driven Animation und Timer-Driven Animation. Im Beispiel werden drei Animationsvariablen mit CreateAnimationVariable erstellt, um Hintergrundfarben darzustellen. Der Code verwendet auch die Methoden SetLowerBound und SetUpperBound, um den Wert der Animationsvariablen zu steuern.
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);
}
}
}
}
}
}
}
}
Beachten Sie die folgenden Definitionen aus MainWindow.h.
class CMainWindow
{
...
private:
// Animated Variables
IUIAnimationVariable *m_pAnimationVariableRed;
IUIAnimationVariable *m_pAnimationVariableGreen;
IUIAnimationVariable *m_pAnimationVariableBlue;
...
};
Animieren von x- und y-Koordinaten
Der folgende Beispielcode stammt aus Thumbnail.cpp im Windows Animation Grid Layout Sample; siehe die CMainWindow::CreateAnimationVariables-Methode. Es werden zwei Animationsvariablen erstellt, um die X- und Y-Koordinaten jedes Objekts darzustellen.
// 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
);
...
}
Beachten Sie die folgenden Definitionen aus Thumbnail.h.
class CThumbnail
{
public:
...
// X and Y Animation Variables
IUIAnimationVariable *m_pAnimationVariableX;
IUIAnimationVariable *m_pAnimationVariableY;
...
};
Animationsvariablen sind Gleitkommazahlen, aber ihre Werte können auch als ganze Zahlen abgerufen werden. Standardmäßig wird jeder Wert auf die nächste ganze Zahl gerundet, aber es ist möglich, den für eine Variable verwendeten Rundungsmodus zu überschreiben. Im folgenden Beispielcode wird die SetRoundingMode-Methode verwendet, um anzugeben, dass die Werte immer abgerundet werden sollen.
hr = m_pAnimationVariableX->SetRoundingMode(
UI_ANIMATION_ROUNDING_MODE_FLOOR
);
if (SUCCEEDED(hr))
{
hr = m_pAnimationVariableY->SetRoundingMode(
UI_ANIMATION_ROUNDING_MODE_FLOOR
);
...
}
Vorheriger Schritt
Bevor Sie mit diesem Schritt beginnen, sollten Sie diesen Schritt abgeschlossen haben: Erstellen sie die Hauptanimationsobjekte.
Nächster Schritt
Nach Abschluss dieses Schritts lautet der nächste Schritt: Aktualisieren des Animations-Managers und Zeichnenvon Frames.