This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Alle numerischen Eigenschaften (numbers, vector3, vector4 und Quaternionen) sowie Shader-Konstanten können mit dem integrierten Animationssystem über die Funktion go.animate() animiert werden. Die Engine interpoliert die Eigenschaften automatisch für dich entsprechend den angegebenen Wiedergabemodi und Easing-Funktionen. Du kannst auch eigene Easing-Funktionen angeben.

Um eine Eigenschaft eines Spielobjekts (game object) oder einer Komponente (component) zu animieren, verwende die Funktion go.animate(). Für Eigenschaften von GUI-Knoten (GUI nodes) lautet die entsprechende Funktion gui.animate().
-- Set the position property y component to 200
go.set(".", "position.y", 200)
-- Then animate it
go.animate(".", "position.y", go.PLAYBACK_LOOP_PINGPONG, 100, go.EASING_OUTBOUNCE, 2)
Um alle Animationen einer bestimmten Eigenschaft anzuhalten, rufe go.cancel_animations() oder bei GUI-Knoten gui.cancel_animations() auf:
-- Stop euler z rotation animation on the current game object
go.cancel_animations(".", "euler.z")
Wenn du die Animation einer zusammengesetzten Eigenschaft wie position abbrichst, werden auch alle Animationen ihrer einzelnen Komponenten (position.x, position.y und position.z) abgebrochen.
Das Handbuch zu Eigenschaften enthält alle verfügbaren Eigenschaften von Spielobjekten, Komponenten und GUI-Knoten.
Fast alle Eigenschaften von GUI-Knoten lassen sich animieren. Du kannst zum Beispiel einen Knoten unsichtbar machen, indem du seine Eigenschaft color auf vollständige Transparenz setzt, und ihn anschließend einblenden, indem du die Farbe zu Weiß animierst (also ohne Einfärbung).
local node = gui.get_node("button")
local color = gui.get_color(node)
-- Animate the color to white
gui.animate(node, gui.PROP_COLOR, vmath.vector4(1, 1, 1, 1), gui.EASING_INOUTQUAD, 0.5)
-- Animate the outline red color component
gui.animate(node, "outline.x", 1, gui.EASING_INOUTQUAD, 0.5)
-- And move to x position 100
gui.animate(node, hash("position.x"), 100, gui.EASING_INOUTQUAD, 0.5)
Die Funktionen zur Eigenschaftsanimation go.animate() und gui.animate() unterstützen als letztes Argument eine optionale Lua-Callback-Funktion. Diese Funktion wird aufgerufen, wenn die Animation bis zum Ende abgespielt wurde. Bei wiederholten Animationen wird die Funktion nie aufgerufen, ebenso wenig, wenn eine Animation manuell über go.cancel_animations() oder gui.cancel_animations() abgebrochen wird. Mit dem Callback kannst du beim Abschluss einer Animation Ereignisse auslösen oder mehrere Animationen miteinander verketten.
Easing legt fest, wie sich der animierte Wert mit der Zeit ändert. Die folgenden Bilder zeigen die Funktionen, die über die Zeit angewendet werden, um das Easing zu erzeugen.
Die folgenden Easing-Werte sind für go.animate() gültig:
go.EASING_LINEAR |
|
go.EASING_INBACK |
go.EASING_OUTBACK |
go.EASING_INOUTBACK |
go.EASING_OUTINBACK |
go.EASING_INBOUNCE |
go.EASING_OUTBOUNCE |
go.EASING_INOUTBOUNCE |
go.EASING_OUTINBOUNCE |
go.EASING_INELASTIC |
go.EASING_OUTELASTIC |
go.EASING_INOUTELASTIC |
go.EASING_OUTINELASTIC |
go.EASING_INSINE |
go.EASING_OUTSINE |
go.EASING_INOUTSINE |
go.EASING_OUTINSINE |
go.EASING_INEXPO |
go.EASING_OUTEXPO |
go.EASING_INOUTEXPO |
go.EASING_OUTINEXPO |
go.EASING_INCIRC |
go.EASING_OUTCIRC |
go.EASING_INOUTCIRC |
go.EASING_OUTINCIRC |
go.EASING_INQUAD |
go.EASING_OUTQUAD |
go.EASING_INOUTQUAD |
go.EASING_OUTINQUAD |
go.EASING_INCUBIC |
go.EASING_OUTCUBIC |
go.EASING_INOUTCUBIC |
go.EASING_OUTINCUBIC |
go.EASING_INQUART |
go.EASING_OUTQUART |
go.EASING_INOUTQUART |
go.EASING_OUTINQUART |
go.EASING_INQUINT |
go.EASING_OUTQUINT |
go.EASING_INOUTQUINT |
go.EASING_OUTINQUINT |
Die folgenden Easing-Werte sind für gui.animate() gültig:
gui.EASING_LINEAR |
|
gui.EASING_INBACK |
gui.EASING_OUTBACK |
gui.EASING_INOUTBACK |
gui.EASING_OUTINBACK |
gui.EASING_INBOUNCE |
gui.EASING_OUTBOUNCE |
gui.EASING_INOUTBOUNCE |
gui.EASING_OUTINBOUNCE |
gui.EASING_INELASTIC |
gui.EASING_OUTELASTIC |
gui.EASING_INOUTELASTIC |
gui.EASING_OUTINELASTIC |
gui.EASING_INSINE |
gui.EASING_OUTSINE |
gui.EASING_INOUTSINE |
gui.EASING_OUTINSINE |
gui.EASING_INEXPO |
gui.EASING_OUTEXPO |
gui.EASING_INOUTEXPO |
gui.EASING_OUTINEXPO |
gui.EASING_INCIRC |
gui.EASING_OUTCIRC |
gui.EASING_INOUTCIRC |
gui.EASING_OUTINCIRC |
gui.EASING_INQUAD |
gui.EASING_OUTQUAD |
gui.EASING_INOUTQUAD |
gui.EASING_OUTINQUAD |
gui.EASING_INCUBIC |
gui.EASING_OUTCUBIC |
gui.EASING_INOUTCUBIC |
gui.EASING_OUTINCUBIC |
gui.EASING_INQUART |
gui.EASING_OUTQUART |
gui.EASING_INOUTQUART |
gui.EASING_OUTINQUART |
gui.EASING_INQUINT |
gui.EASING_OUTQUINT |
gui.EASING_INOUTQUINT |
gui.EASING_OUTINQUINT |

Du kannst eigene Easing-Kurven erstellen, indem du einen vector mit einer Reihe von Werten definierst und diesen Vektor anstelle einer der oben aufgeführten vordefinierten Easing-Konstanten übergibst. Die Vektorwerte beschreiben eine Kurve vom Startwert (0) zum Zielwert (1). Die Laufzeitumgebung liest Werte aus dem Vektor aus und interpoliert linear, um Werte zwischen den im Vektor angegebenen Punkten zu berechnen.
Der folgende Vektor zum Beispiel:
local values = { 0, 0.4, 0.2, 0.2, 0.5, 1 }
local my_easing = vmath.vector(values)
ergibt diese Kurve:

Das folgende Beispiel lässt die y-Position eines Spielobjekts entsprechend einer Rechteckkurve zwischen der aktuellen Position und 200 springen:
local values = { 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1 }
local square_easing = vmath.vector(values)
go.animate("go", "position.y", go.PLAYBACK_LOOP_PINGPONG, 200, square_easing, 2.0)
