2D-Animationsklasse

Aus Spieleprogrammierer-Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
[unmarkierte Version][unmarkierte Version]
(Pseudocode)
Zeile 57: Zeile 57:
 
Da es ausreichend ist, dass jede Instanz der 2D Animaitons Klasse auf einen einzigen Zeitgeber zurückgreift, ist dieser statisch. Der statische Zeitgeber ist sozusagen der Motor der Klasse. Wird die Funktion ''Get_CurrentFrame()'' aufgerufen wird als erstes überprüft ob ''Animation_On'' true oder false ist. Wenn ''Animation_On'' gleich false ist, wird der [[Sprite Sheet Klasse]] mittels der ''Get_Sprite(int Index)'' Methode die Variable ''StopFrame'' übergeben und die Funktion gibt das gewünschte [http://de.wikipedia.org/wiki/Sprite_(Computergrafik) Sprite] zurück, für den Fall das keine Animation erwünscht ist. Für den Fall, dass ''Animation_On'' gleich true ist, wird verglichen ob, NextFrameTime kleiner ist wie Timer. Solange ''NextFrameTime'' größer ist wie ''Timer'' wird das aktuelle Bild der Animation dargestellt. Wenn der Wert des ''Timer'' größer wird als der Wert von ''NextFrameTime'', wird ''CurrentFrame'' um eins erhöht und der Wert von ''NextFrameTime'' mit der Rechnung <span style="color:#505050"> NextFrameTime = Timer + FrameTime </span> neu ermittelt. Trifft der Fall ein, dass der Wert von ''CurrentFrame'' größer wird wie der Wert von ''LastFrame'', wird ''CurrentFrame'' wieder auf den Wert von ''FirstFrame'' gesetzt. So beginnt die Animation wieder von vorne.
 
Da es ausreichend ist, dass jede Instanz der 2D Animaitons Klasse auf einen einzigen Zeitgeber zurückgreift, ist dieser statisch. Der statische Zeitgeber ist sozusagen der Motor der Klasse. Wird die Funktion ''Get_CurrentFrame()'' aufgerufen wird als erstes überprüft ob ''Animation_On'' true oder false ist. Wenn ''Animation_On'' gleich false ist, wird der [[Sprite Sheet Klasse]] mittels der ''Get_Sprite(int Index)'' Methode die Variable ''StopFrame'' übergeben und die Funktion gibt das gewünschte [http://de.wikipedia.org/wiki/Sprite_(Computergrafik) Sprite] zurück, für den Fall das keine Animation erwünscht ist. Für den Fall, dass ''Animation_On'' gleich true ist, wird verglichen ob, NextFrameTime kleiner ist wie Timer. Solange ''NextFrameTime'' größer ist wie ''Timer'' wird das aktuelle Bild der Animation dargestellt. Wenn der Wert des ''Timer'' größer wird als der Wert von ''NextFrameTime'', wird ''CurrentFrame'' um eins erhöht und der Wert von ''NextFrameTime'' mit der Rechnung <span style="color:#505050"> NextFrameTime = Timer + FrameTime </span> neu ermittelt. Trifft der Fall ein, dass der Wert von ''CurrentFrame'' größer wird wie der Wert von ''LastFrame'', wird ''CurrentFrame'' wieder auf den Wert von ''FirstFrame'' gesetzt. So beginnt die Animation wieder von vorne.
 
== Pseudocode ==
 
== Pseudocode ==
 +
Da es eine große Anzahl von Frameworks und Programmiersprachen gibt, sind hier exemplarisch die wichtigsten Funktionen der 2D Animations Klasse in Pseudocode. Das Transferieren des Pseudocodes in die gewünschte Programmiersprache / Framework sollte für die Meisten keine Probleme darstellen.
 +
{{Spoiler|'''Header Datei'''|
 +
<sourcecode lang=cpp tab=4 >
 +
/* Header der 2dAnimation Klasse  */
 +
 +
class C2dAnimation
 +
{
 +
private:
 +
    static Framework::Zeitgeber Timer;    // Zeitgeber abhängig von Programmiersprache oder verwendeter Bibliothek
 +
    CSpriteSheet Sheet;                  // Instanz der Sprite Sheet Klasse zum ermitteln des Richtigen Sprites
 +
    float FrameTime;                      // Zeit die ein Frame der Animation angezeigt wird
 +
    float NextFrameTime;                  // Zeit bei der das nächste Sprite angezeigt wird
 +
    int FirstFrame;                      // Erste Index auf dem Sprite Sheet für die Animation
 +
    int LastFrame;                        // Letzte Index auf dem Sprite Sheet für die Animation
 +
    int StopFrame;                        // Index des Bildes was Dargstellt wird wenn die Animation aus ist
 +
    bool Animation_On;                    // Animation an/aus
 +
public:
 +
    bool Load_SpriteSheet(String Path,
 +
                          int X_Size,
 +
                          int Y_Size);    // Funktion zum Laden des Richtigen Bildes
 +
    Framework::Sprite Get_CurrentFrame(); // Funktion die das darzustellende Sprite liefert
 +
    void Set_Animation(int firstframe,
 +
                      int lastframe,
 +
                      int stopframe,
 +
                      float frametime)  // Setzten der Animationsdaten
 +
    bool Animation_On(bool Value);        // Funktion um die Animation ein- oder ausschalten
 +
    C2dAnimation();                      // Konstruktor
 +
    ~C2dAnimation();                      // Destroktor
 +
};
 +
</sourcecode>
 +
}}
 +
{{Spoiler|'''Load_SpriteSheet((String Path,int X_Size,int Y_Size)'''|
 +
<sourcecode lang=cpp tab=4 >
 +
bool C2dAnimation::Load_SpriteSheet(String Path,int X_Size,int Y_Size)
 +
{
 +
    zurückgeben Sheet.Load(Path,X_Size,Y_Size); // gibt true oder false zurück
 +
}
 +
</sourcecode>
 +
}}
 +
 +
{{Spoiler|'''Get_CurrentFrame()'''|
 +
<sourcecode lang=cpp tab=4 >
 +
bool C2dAnimation::Get_CurrentFrame()
 +
{
 +
    Wenn Animation an ist(Animation_On == true)
 +
    {
 +
        Wenn NextFrameTime kleiner Timer ist (NextFrameTime < Timer)
 +
        {
 +
            zurückgeben Sheet.Get_Sprite(CurrentFrame);
 +
        }
 +
        sonst
 +
        {
 +
            CurrentFrame = CurrenFrame + 1;
 +
            Wenn CurrentFrame gößer LastFrame ist (CurrentFrame > LastFrame)
 +
            {
 +
                CurrentFrame = FirstFrame;
 +
                NextFrameTime = Timer + FrameTime;
 +
            }
 +
            zurückgeben Sheet.Get_Sprite(CurrentFrame);
 +
        }
 +
    }
 +
    sonst
 +
    {
 +
        zurückgeben Sheet.Get_Sprite(StopFrame);
 +
    }
 +
}
 +
</sourcecode>
 +
}}
 +
{{Spoiler|'''Set_Animation(int firstframe,int lastframe,int stopframe,float frametime)'''|
 +
<sourcecode lang=cpp tab=4 >
 +
bool C2dAnimation::Set_Animation(int firstframe,int lastframe,int stopframe,float frametime)
 +
{
 +
    // Setzen der Daten
 +
    FirstFrame = firstframe;
 +
    LastFrame = lastframe;
 +
    StopFrame = stopframe;
 +
    FrameTime = frametime;
 +
}
 +
</sourcecode>
 +
}}
 +
{{Spoiler|'''Animation_On(bool Value)'''|
 +
<sourcecode lang=cpp tab=4 >
 +
bool C2dAnimation::Animation_On(bool Value)
 +
{
 +
    Wenn Value True ist (Value == true)
 +
    {
 +
        CurrentFrame = FirstFrame;
 +
        NextFrameTime = Timer + FrameTime;
 +
        Animation_On = true;
 +
    }
 +
    sonst
 +
    {
 +
        Animation_On = false;
 +
    }
 +
}
 +
</sourcecode>
 +
}}

Version vom 15. Oktober 2012, 09:37 Uhr

Klicke hier, um diese Version anzusehen.

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge