Come posso gestire con garbo questa aggiunta di animazione?

0

Ho la seguente configurazione in una libreria della GUI che sto realizzando (per divertimento). Ignora i colori e le posizioni come numeri interi, serve solo a scopo di illustrazione.

// Example program
#include <iostream>
#include <string>

class Rect
{
public:
    virtual void Draw(const int position) const = 0;    
};

class ColorRect : public Rect
{
public:
    virtual void Draw(const int position) const override
    {
        /* does a draw */
    }

    int color;
};

class TextureRect : public Rect
{
public:
    virtual void Draw(const int position) const override
    {
        /* does a draw textured */
    }

    int texture;
};

class Widget
{
public:
    Rect* background;
    int position;

    virtual void Draw() const
    {
        background->Draw(position);
    }

    virtual void Update()
    {
        /* might do stuff */
    }
};

class Button : public Widget
{
public:
    virtual void Draw() const override
    {
        Widget::Draw();
        border->Draw(position);
    }
    Rect* border;
};

int main()
{
    ColorRect redRect;
    redRect.color = 1;

    ColorRect blueRect;
    blueRect.color = 2;

    TextureRect textRect;
    textRect.texture = 1;

    Button b1;
    b1.border = &blueRect;
    b1.background = &redRect;
    b1.position = 1;

    Button b2;
    b2.border = &blueRect;
    b2.background = &textRect;
    b2.position = 2

    while(true)
    {
        b1.Update();
        b2.Update();
        b1.Draw();
        b2.Draw();
    }
}

Penso che dovrebbe essere ovvio che la classe Rect sia un peso mosca che viene utilizzato da più oggetti diversi allo stesso tempo.

Quello che voglio fare ora, ad esempio, è avere b1 animare il suo confine Rect . Questa animazione non dovrebbe influenzare l'altro Widget* s che usa lo stesso Rect* , cioè la loro animazione deve essere messa in pausa, avviata e avere un "frame corrente" diverso. Sono riluttante a creare una classe "Animated Rect" o qualcosa del genere, perché in questo caso l'unico modo per gestire un'animazione separata è che la classe mantenga una mappa di puntatori su Widget s che la sta usando o qualcosa del genere.

Inoltre; Vorrei anche animare, per esempio, la posizione. Ciò significa che idealmente l'interfaccia che usi per animare le posizioni (che sono specifiche per l'oggetto), è uguale a quella usata per animare la trama o il colore (che è attualmente condivisa tra gli oggetti).

Qualunque cosa sia in grado di mantenere lo stato Animazione dovrebbe contenere alcune cose come frame_rate e probabilmente time_since_updated o qualcosa del genere.

Non riesco a capire dove metterlo o cosa riorganizzare per adattarlo.

    
posta NeomerArcana 23.08.2018 - 05:55
fonte

0 risposte

Leggi altre domande sui tag