frame

next_frame

Zur Darstellung einer Animation können Modell- und Spriteentitys aus beliebig vielen Frames bestehen. Bei Spritenentities müssen die Animationsframes gleich gross und in der Grafikdatei nebeneinander angeordnet sein; die Frame-Anzahl muss am Ende des Dateinamens nach einem ‘+’ angegeben werden, so wie hier (die Gesamtlänge des Dateinamens darf 20 Zeichen nicht überschreiten):

Es gibt zwei Möglichkeiten, Modell- oder Spriteentities zu animieren. Besteht die Entity aus mehreren Frames, hat aber keine angehängte Aktion, laufen alle Frames nacheinander mit einer Geschwindigkeit von 8 Frames pro Sekunde bei Modellen und 12 Frames pro Sekunde bei Sprites ab. Ist eine Aktion angehängt, wird sie nicht selbständig animiert. Statt dessen gibt ihr frame-Wert (1...Anzahl von Frames) die Nummer des aktuellen Frames wieder. Das Modell kann also animiert werden, indem man permanent time_step zu dem frame Parameter hinzuzählt.

Für ein sich gehend fortbewegendes Modell kann man alternativ statt eines Zeitfaktors die überbrückte Distanz zu frame hinzuaddieren. Ist der frame-Parameter nicht ganzzahlig, wird die Form der Model-Entity gemäß dem Nachkomma-Anteil zwischen frame und next_frame interpoliert. Ist next_frame 0, erfolgt die Interpolation zwischen frame und frame+1. Auf diese Weise kann ein Modell stufenlos zwischen beliebigen Animationsframes 'gemorpht' werden.

Normalerweise wird eine Modell-Entity aber mit der ent_animate Anweisungen animiert.

Wertebereich:

0 .. maximale Frameanzahl (default: 0)

Typ:

var

Beispiel:

my.frame += 1.5*time_step; // gibt 16/1.5 = 12 Frames    pro Sekunde
my.frame %= 10; // nicht die maximale Framezahl überschreiten    

Beispiel für eine Funktions-Schleife, die per next_frame ein Modell stufenlos zwischen den Frames 20 und 30 animiert:

my.frame = 20; 				// start-frame 
while (1) 
{ 
  my.frame += time_step;			// 16 frames pro sekunde 
  if (my.frame> 30) { my.next_frame = 20; } // interpoliere nach start frame 
  else { my.next_frame = 0; } 		// interpoliere nach frame+1 
  if (my.frame >= 31) { my.frame -= 10; } 	// end-frame erreicht 
  wait(1); 
} 

Siehe auch:

ent_animate, ent_blend 

► Aktuelle Version Online