Programmierung von Animationseffekten
7) AnimFX-Objekte speichern und lesen
AnimFX-Objekte sind ganz normale monzoom®-Objekte, werden also beim Speichern der Szene mitgeschrieben. monzoom® schreibt die Objektvariablen und die internen Variablen ins File, ebenso die Sequenz mit allen Informationen. Wichtig wird beim erneuten Einladen das Schlüsselwort
INIT_READ
Wenn man AnimFX-Objekte erzeugt, wird der INIT-Aufruf angesprungen. Dort wird der Benutzer z.B. nach Objekten, Parametern etc. gefragt. Das AnimFX-Objekt wird dementsprechend initialisiert, d.h. es werden Variablen angefordert und die Werte werden darin abgespeichert.
Wenn jedoch ein AnimFX-Objekt aus einem File gelesen wird, stehen die Informationen über Parameter, Objekte etc. für das AnimFX-Objekt bereits im File, denn der Benutzer soll nicht mehr danach gefragt werden.
Jedoch muß das Skript bei INIT_READ auch sonst alle anderen Aufgaben erfüllen, wie sie bei INIT nötig sind, d.h. mit AFX_ALLOK_INTERN_VARS die Anzahl der Variablen definieren, mit AFX_SET_INT/AFX_SET_REAL/AFX_SET_OBJ die Variablen initialisieren; außerdem mit AFX_SET_N_OBJ_VARS die Objektvariablen anfordern sowie mit AFX_DEFINE_OBJ_VAR Typ, Name und Bereich der Variable festsetzen. Dieser Teil ist somit identisch zum INIT-Teil.
Es empfiehlt sich daher folgendes Schema:
>INIT:
; Benutzer nach Parametern und Objekten fragen und in
; Variablen speichern
; z.B:
; jetzt fragen, welches Objekt rütteln soll
GET_GEO_OBJ "Welches Objekt"
RETURN_IF_ABBRUCH AB
GET_RESULT obj
; rüttelfaktor
GET_REAL "Wuzzel-Faktor"
RETURN_IF_ABBRUCH AB
GET_RESULT faktor
GOTO INIT1
; man beachte diesen Sprung, das Skript läuft also noch weiter!
>INIT_READ:
; hier initialiiseren wir nur die Variablen
SET_VAR obj ----
SET_VAR faktor 0
; danach geht das Skript automatisch zur folgenden Marke über:
>INIT1:
; nun die AFX-Initialisierungen erledigen
AFX_ALLOK_INTERN_VARS ich 0 1 1
AFX_SET_REAL ich 0 faktor
AFX_SET_OBJ ich 0 obj
AFX_SET_N_OBJ_VARS...
...
RETURN OK
; hiermit ist die Initialisierung durch das Skript für Schlüsselwort
; INIT bzw. INIT_READ abgeschlossen
Bei INIT_READ werden also die Variablen zwar angefordert und initialisiert, aber deren Werte werden beim Lesen des Files gesetzt (und nicht wie bei INIT durch den Benutzer eingegeben).
Achtung:
Wenn bei AFX_ALLOK_INTERN_VARS oder AFX_SET_N_OBJ_VARS andere Werte angegeben werden als zuvor beim INIT, so tritt ein Fehler auf und das Lesen wird abgebrochen. monzoom® bemerkt diese Abweichung, denn die Anzahl der Variablen ist auch im Szenenfile mitgespeichert.
Dieser Fall kann sehr leicht auftreten, wenn man z.B. ein Skript ändert (hier: die Anzahl der Variablen verringert oder erhöht) und eine alte Szene liest, die noch auf dieses Skript zurückgreift.
Wenn man also ein Skript ändern will, sollte man es zuvor kopieren und umbenenennen, damit nicht alte Szenen, die dieses Skript benutzen, nicht mehr lesbar werden.
© 1997 Oberland Computer