Udostępnij przez


Tworzenie zmiennych animacji

Aplikacja musi utworzyć zmienną animacji dla każdej charakterystyki wizualnej, która ma być animowana przy użyciu animacji systemu Windows.

Przegląd

Zmienne animacji są tworzone przy użyciu menedżera animacji, a aplikacja powinna zachować odwołanie do każdego z nich tak długo, jak jest to potrzebne. Aplikacja zazwyczaj tworzy każdą zmienną animacji w tym samym czasie co animowany obiekt wizualizacji.

Po utworzeniu zmiennej animacji należy określić jej początkową wartość. Następnie jej wartość można zmienić tylko poprzez zaplanowanie scenorysów, które ją animują.

Zmienne animacji są przekazywane jako parametry podczas konstruowania scenorysów, więc aplikacja nie powinna ich zwalniać do momentu, gdy właściwości wizualne, które reprezentują, nie muszą już być animowane, zazwyczaj gdy skojarzone obiekty wizualne zostaną zniszczone.

Przykładowy kod

Animowanie kolorów

Poniższy przykładowy kod pochodzi z pliku MainWindow.cpp w przykładach Windows Animation: Application-Driven Animacja oraz Timer-Driven Animacja. W tym przykładzie są tworzone trzy zmienne animacji przy użyciu CreateAnimationVariable do reprezentowania kolorów tła. Kod używa również metod SetLowerBound i SetUpperBound metod do kontrolowania wartości zmiennej animacji.

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);
                            }
                        }
                    }
                }
            }
        }
    }
}

Zwróć uwagę na następujące definicje z mainWindow.h.

class CMainWindow
{

    ...

private:

    // Animated Variables

    IUIAnimationVariable *m_pAnimationVariableRed;
    IUIAnimationVariable *m_pAnimationVariableGreen;
    IUIAnimationVariable *m_pAnimationVariableBlue;

    ...

};

Animowanie współrzędnych x i y

Przykładowy kod przedstawiony poniżej pochodzi z pliku Thumbnail.cpp w przykładzie układu siatki animacji Windows ; zobacz metodę CMainWindow::CreateAnimationVariables. Tworzone są dwie zmienne animacji reprezentujące współrzędne X i Y każdego obiektu.

// 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
        );

    ...

}

Zwróć uwagę na następujące definicje z thumbnail.h.

class CThumbnail
{
public:

    ...

    // X and Y Animation Variables

    IUIAnimationVariable *m_pAnimationVariableX;
    IUIAnimationVariable *m_pAnimationVariableY;

    ...

};

Zmienne animacji są liczbami zmiennoprzecinkowymi, ale ich wartości można również pobrać jako liczby całkowite. Domyślnie każda wartość zostanie zaokrąglona do najbliższej liczby całkowitej, ale można zastąpić tryb zaokrąglania używany dla zmiennej. Poniższy przykładowy kod używa metody SetRoundingMode, aby określić, że wartości powinny być zawsze zaokrąglane w dół.

hr = m_pAnimationVariableX->SetRoundingMode(
    UI_ANIMATION_ROUNDING_MODE_FLOOR
    );
if (SUCCEEDED(hr))
{
    hr = m_pAnimationVariableY->SetRoundingMode(
        UI_ANIMATION_ROUNDING_MODE_FLOOR
        );

    ...

}

Poprzedni krok

Przed rozpoczęciem tego kroku należy wykonać ten krok: Utwórz główne obiekty animacji.

Następny krok

Po wykonaniu tego kroku następnym krokiem jest: Zaktualizowanie Menedżera animacji i rysowanie ramek.

IUIAnimationManager::CreateAnimationVariable

IUIAnimationVariable::SetLowerBound

IUIAnimationVariable::SetRoundingMode

IUIAnimationVariable::SetUpperBound

Animacja systemu Windows — omówienie