Animationen: Aufbau

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


Sie betrachten gerade eine ältere Version des Eintrags. Klicken Sie hier, um zur aktuellen Version zu gelangen.

  • Dieser Eintrag befasst sich mit der Definition von Animationen

    1 Wo werden Animationen definiert?

    Das Basisgerüst setzt bei der [tt]animations[/tt]-Tabelle von Modeldateien (*.mdl), Meshdateien (*.msh) und Groupdateien (*.grp) an. Ohne Animation sieht diese wie folgt aus (oder wurde der Einfachheit halber einfach weg gelassen): [code]animations = {},[/code]Es können darin beliebig viele Animationen definiert werden.

    2 Basisgerüst

    [code='Basisgerüst (Generisch)']name = { params = { . . . }, type = ..., },[/code]Die Definition einer Animation beginnt mit der ID der Animation (Zeile 1, [tt]name[/tt]), mit der später per [url='https://www.train-fever.net/lexikon/index.php/Entry/97-Animationen-Events/'][u]Event[/u][/url] die Animation referenziert wird. Die Tabelle [tt]params[/tt] beinhaltet die Parameter für die Animation (Keyframes, etc.), welche vom Animationstyp [tt]type[/tt] abhängen.

    3 Animationstypen

    Es sind (mir) drei verschiedene Animationstypen in Train Fever bekannt: [table] [tr] [td]Animationstyp:[/td] [td]KEYFRAME[/td] [td]KEYFRAME_MATRIX[/td] [td]FILE_REF[/td] [/tr] [tr] [td]Verwendung:[/td] [td]Von Hand erstellte Animationen[/td] [td]Von Scripts erstellte Animationen[/td] [td]große Animationen[/td] [/tr] [tr] [td]Beispiel:[/td] [td][url='https://www.train-fever.net/lexikon/index.php/Entry/71-T%C3%BCren-animieren/'][u]Fahrzeugtüre[/u][/url][/td] [td][url='https://www.train-fever.net/lexikon/index.php/Entry/31-Pleuelstangen-animieren/'][u]Pleulstangen[/u][/url][/td] [td]Personen[/td] [/tr] [tr] [td]Methode zur Definition der Keyframes[/td] [td]Eulerwinkel und lineare Transformation[/td] [td][url='https://www.train-fever.net/lexikon/index.php/Entry/83-Transformationsmatrix/'][u]Transformationsmatrix[/u][/url][/td] [td][url='https://www.train-fever.net/lexikon/index.php/Entry/83-Transformationsmatrix/'][u]Transformationsmatrix[/u][/url][/td] [/tr] [/table] Was jedoch man selber verwenden möchte ist dem eigenen Geschmack überlassen. Da der "KEYFRAME"-Typ der am leichtesten Verständliche ist - es gibt hierfür am Meisten Beispiele (quasi jede Fahrzeugtüre) - empfehle ich diesen zu benutzen.

    3.1 KEYFRAME

    Das Basisgerüst sieht bei diesem Animationstyp folgender Maßen aus: [code='Basisgerüst (Animationstyp KEYFRAME)']name = { params = { keyframes = { . . . }, origin = { 0, 0, 0, }, }, type = "KEYFRAME", },[/code][tt]origin = { x, y, z}[/tt] gibt dabei den Punkt (im Koordinatensystem des zu drehenden Objektes, Angaben in Metern) an, um den die Rotation ausgeführt wird. Die Tabelle [tt]keyframes[/tt] muss aus mindestens zwei Keyframes des folgenden Formates bestehen, dabei muss der erste Keyframe die Zeitpunkt '0' (Null) besitzen: [code='KEYFRAME (Animationstyp KEYFRAME)']{ time = 0, rot = {0,0,0}, transl = {0,0,0}, },[/code]Die Werte besagen folgendes: [list][*][tt]time[/tt]: Zeitpunkt des Keyframes in Millisekunden [*][tt]rot = {z,y,x}[/tt]: Gibt die Rotation gegenüber der Lage ohne Animation an. Es handelt sich dabei um Eulerwinkel (in Grad) nach der [url='https://de.wikipedia.org/wiki/Eulersche_Winkel#Gier-Nick-Roll:_z.2C_y.E2.80.B2.2C_x.E2.80.B3-Konvention'][b]z, y′, x″-Konvention[/b][/url]. [*][tt]transl = {x,y,z}[/tt]: Translatorische Verschiebung des Objektes (bzgl. Lage ohne Animation, in Metern), welche [i]nach [/i]der Drehung angewendet wird. [/list]

    3.2 KEYFRAME_MATRIX

    Das Basisgerüst sieht bei diesem Animationstyp folgender Maßen aus: [code='Basisgerüst (Animationstyp KEYFRAME_MATRIX)']name = { params = { keyframes = { . . . }, }, type = "KEYFRAME_MATRIX", }[/code]Die Tabelle [tt]keyframes[/tt] muss aus mindestens zwei Keyframes des folgenden Formates bestehen, dabei muss der erste Keyframe die Zeitpunkt '0' (Null) besitzen: [code='KEYFRAME (Animationstyp KEYFRAME_MATRIX)']{ time = 0, transf = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, }, },[/code]Die Werte besagen folgendes: [list][*][tt]time[/tt]: Zeitpunkt des Keyframes in Millisekunden [*][tt]transf = {Transformationsmatrix}[/tt]: [url='https://www.train-fever.net/lexikon/index.php/Entry/83-Transformationsmatrix/'][b]Transformationsmatrix[/b][/url] (bzgl. Lage ohne Animation) entsprechend den Matrizen zur Objektplatzierung in Model- und Group-Dateien. [/list]Ein Hinweise noch: Jeder Punkt/Vertex bewegt sich auf einer geraden Bahn zwischen zwei Keyframes! Rotierende Objekte werden also - je nach Auflösung der Bewegung - gestaucht und gestreckt bei der Bewegung. Im Anhang ein Beispiel. In der Modliste taucht es als "Forumsbeispiel Animation Matrix" auf.

    3.3 FILE_REF

    Das Basisgerüst sieht bei diesem Animationstyp folgender Maßen aus: [code='Basisgerüst (Animationstyp FILE_REF)']name = { params = { id = ..., }, type = "FILE_REF", },[/code][tt]id = "Datei.ani"[/tt] referenziert dabei auf die [url='https://www.train-fever.net/lexikon/index.php/Entry/9-Mesh-Dateien-und-Animationen-msh-msh-blob-ani/#Animationen_(.ani)'][b]Animationsdatei (*.ani)[/b][/url] relativ zum Pfad [tt]res/models/animation/[/tt]

    3.4 Beispiel mit allen Typen

    [code='Beispiel']animations = { keyframeAnimation= { params = { keyframes = { { time = 0, rot = {0,0,0}, transl = {0,0,0}, }, { time = 1000, rot = {360,0,0}, transl = {0,0,10}, } }, origin = { 1, 2, 0, }, }, type = "KEYFRAME", }, keyframeMatrixAnimation = { params = { keyframes = { { time = 0, transf = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, }, }, { time = 5000, transf = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 5, 1, }, }, }, }, type = "KEYFRAME_MATRIX", }, fileRefAnimation = { params = { id = "man01_idle_lod_2/_root.ani", }, type = "FILE_REF", }, },[/code]Dieser Eintrag wurde mit größter Sorgfalt erstellt. Es kann aber nicht ausgeschlossen werden, dass sich Fehler eingeschlichen haben ;) .

Teilen