Manuals
Manuals




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

Eigenschaftsanimation

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.

Eigenschaftsanimation Wiederholte Sprungbewegung

Eigenschaftsanimation

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.

Eigenschaftsanimation bei 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)

Callbacks bei Abschluss

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

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

Lineare Interpolation Back-Kurve (In) Back-Kurve (Out) Back-Kurve (In-out) Back-Kurve (Out-in) Bounce-Kurve (In) Bounce-Kurve (Out) Bounce-Kurve (In-out) Bounce-Kurve (Out-in) Elastische Kurve (In) Elastische Kurve (Out) Elastische Kurve (In-out) Elastische Kurve (Out-in) Sinuskurve (In) Sinuskurve (Out) Sinuskurve (In-out) Sinuskurve (Out-in) Exponentialkurve (In) Exponentialkurve (Out) Exponentialkurve (In-out) Exponentialkurve (Out-in) Kreiskurve (In) Kreiskurve (Out) Kreiskurve (In-out) Kreiskurve (Out-in) Quadratische Kurve (In) Quadratische Kurve (Out) Quadratische Kurve (In-out) Quadratische Kurve (Out-in) Kubische Kurve (In) Kubische Kurve (Out) Kubische Kurve (In-out) Kubische Kurve (Out-in) Quartische Kurve (In) Quartische Kurve (Out) Quartische Kurve (In-out) Quartische Kurve (In-out) Quintische Kurve (In) Quintische Kurve (Out) Quintische Kurve (In-out) Quintische Kurve (Out-in)

Eigenes Easing

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:

Eigene 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)

Rechteckkurve