WaBis

walter.bislins.ch

Animation: Zusammengesetzte Tracks

In den allermeisten Fällen wird man etliche Tracks für ein einzelnes Objekt brauchen, die sich aneinander anschliessen. Damit man nicht jeden einzelnen Track separat programmieren muss, gibt es eine Funktion, mit welcher man eine ganze Sequenz von Tracks mit einem Funktionsaufruf erzeugen kann.

Funktion AddTracks

CAnim.AddTracks( aDivID, aStartFrameIx, ... )

Beispiel 1

myAnim.AddTracks( 'ball', 0, [100,50], [500,50], null, [100,50] );

entspricht der Sequenz:

myAnim.AddTrack( 'ball', 0, 1, [100,50], [500,50] );
myAnim.AddTrack( 'ball', 1, 1, [500,50], null );
myAnim.AddTrack( 'ball', 2, 1, [500,50], [100,50] );

Die beiden Beispiele oben erzeugen eine identische Animation. Der Ball wird von links nach rechts verschoben, bleibt dort eine Zeit lang stehen und wird dann wieder von rechts nach links zurück verschoben.

Tipp: null ist eine Abkürzung für vorherige Positionsangabe. Immer wenn zwei oder mehrere Positionsangaben hintereinander identisch sind, muss nur die erste voll ausgeschrieben werden, alle weiteren können mit null abgekürzt werden.

Spezielle Möglichkeiten von AddTracks

Die Funktion AddTracks() ist sehr flexibel, sodass sie AddTrack() oft vollständig ersetzen kann. AddTracks() kennt ein paar spezielle Anwendungsformen:

Statischer Track

myAnim.AddTracks( 'ball', Startframe, [100,50] );

Erzeugt einen Track, der von Startframe bis zum Ende der Animation geht und den Ball bei [100,50] statisch stehen lässt.

Mehrere Frames überspannen

myAnim.AddTracks( 'ball', 1, [100,50], 2, [500,50], 0 );

Erzeugt 2 Tracks. Der erste beginnt bei Frame 1 an der Position [100,50], geht über 2 Frames und endet also bei Frame 3 an der Position [500,50]. Der zweite Track beginnt bei Frame 3 an der letzten Position [500,50] und geht bis zum letzten Frame der Animation, wobei die Position beibehalten wird, als wenn hinter 0 noch null stehen würde.

myAnim.AddTracks( 'ball', 1, [100,50], 2, [500,50], 0, [100,50] );

Erzeugt wie oben ebenfalls zwei Tracks, wobei der zweite Track die Endposition [100,50] hat. Werte zwischen zwei Positionen geben also an, wie viele Frames ein Track überspannt, wobei der spezielle Wert 0 bedeutet, bis zum Ende der bis dahin definierten Animation. Wenn kein Frame überspannt werden soll, kann man den Wert 1 zwischen zwei Positionsangaben weglassen.

Statische und dynamische Tracks mischen

myAnim.AddTracks( 'ball', 0, [100,50], 2, null, 2, [500,50], 0 );

Erzeugt 3 Tracks: Der erste beginnt bei Frame 0 an der Startposition [100,50], überspannt 2 Frames und endet also bei Frame 2, wegen null an derselben Position. Der zweite Track beginnt bei Frame 2 an der letzten definierten Position, also [100,50], überspannt 2 Frames und endet also bei Frame 4 an der Endposition [500,50]. Der dritte Track schliesslich beginnt bei Frame 4 an der zuletzt angegebenen Position [500,50] und endet an derselben Position beim letzten Frame der Animation. Wir haben also zwei statische Frames mit einem dynamischen dazwischen erzeugt.

Beispiel 2

function BuildAnimation() {
  var dt = 1000;
  myAnim.AddFrames( [dt,dt,dt,dt,dt,dt] );
  myAnim.AddTracks( 'ball', 0,
    [100,10], 2, null, 2, [500,10], null, [100,10] );
  myAnim.AddTracks( 'sun',  0,
    [100,50], [300,50], [100,50], [500,50], 2, null, [100,50] );
  myAnim.Load(); // initialisiert die Animation
}

Starte die Animation

Modulation des Pfades bei AddTracks

Auch bei der Funktion AddTracks() können sowohl die einzelnen Tracks, als auch die ganze Track-Sequenz moduliert werden, wobei in letzterem Fall die Modulations-Funktion jedem einzelnen Track der Sequenz zugewiesen wird. Zudem besteht auch hier natürlich die Möglichkeit, eine globale Modulations-Funktion dem entsprechenden Actor zuzuweisen (siehe Globale Modulation aller Pfade eines Objektes).

Beispiel 3

function Vibrate( aValue ) {
  return aValue + Math.sin(Math.PI*aValue*4)/10;
}

function BuildAnimation() {
  var dt = 1000;
  myAnim.AddFrames( [dt,dt,dt,dt,dt,dt] );
  myAnim.AddTracks( 'ball', 0, Vibrate,
    [100,10], 2, null, 2, [500,10], null, [100,10] );
  myAnim.AddTracks( 'sun',  0,
    [100,50], [300,50], Vibrate, [100,50], [500,50], 2, null, 
    Vibrate, [100,50] );
  myAnim.Load(); // initialisiert die Animation
}

Starte die Animation

Dadurch, dass beim Ball die Funktion Vibrate() am Anfang, vor der ersten Positionsangabe gesetzt wird, gilt diese für die ganze Track-Sequenz. Bei der Sonne hingegen gilt Vibrate() nur für jene Tracks, zwischen deren Positionsangaben sie gesetzt wird. Im Beispiel immer dort, wo die Sonne von rechts nach links läuft.

Weitere Infos zur Seite
Erzeugt Freitag, 16. Mai 2008
von wabis
Zum Seitenanfang
Geändert Samstag, 18. Juli 2015
von wabis