LoadVariables

BitMan

Erfahrenes Mitglied
Hallo Leute,

das ist eine sicher sehr simple Frage, die mir aber bisher unbeantwortet blieb. Wahrscheinlich ein generelles Versändnis-Problem.

Problem:
Ich möche Variablen für eine Flash-Animation aus einer Text-Datei lesen.

Lösungansatz:
Textdatei mit einer Testvariablen, Inhalt:
text = 10;

Flash-Test mit einem Textffeld, Code im ersten Frame:
Code:
var x = this.loadVariables("vars.txt");
if(this.filetext=="")
    MeinFeld.text = this.text;
else
    MeinFeld.text = "nicht geladen";

Wo liegt hier mein Fehler? Wenn ich STRG & ENTER drücke, kommt nur die unter ELSE generierte Aussage.

LG BitMan
 
Zuletzt bearbeitet:
Zum einen...
Keine Leerzeichen vor und hinter dem "=" in der Textdatei. Auch das Variablentrennzeichen & kann nichts schaden, also
Code:
&text=10
Zum anderen...
Einen gewissen Moment dauert es schon, bis eine Datei geladen ist. Insofern kann deren Inhalt nicht eine Codezeile nach dem Aufruf auch schon da sein. ;)
Besser ist es deshalb, eine Lademethode zu verwenden, die "asynchron" prüft, ob/wann etwas geladen wurde und dann erst entsprechend die Reaktion darauf auslöst. Schau dir dazu mal das loadVars-Objekt in der Flashhilfe an bzw. such hier im FLashboard oder auch in den Flash-FAQ nach "loadVars". Da dürftest du einige Scriptschnippsel finden.

Alles natürlich abhängig von deiner Flashversion. Bis Flash 5 ging nur loadVariables und seit Flash CS3 (da dann in Verbindung mit Actionscript 3) ist's glaub wieder anders.

Gruß
Rena
 
Zuletzt bearbeitet:
Mittlerweile bin ich mit LoadVarNum weiter, kann den Inhalt in ein Textfeld laden das ich als Variable nutze, aber ich will die Werte nicht in einem Textfeld sondern ich will sie direkt in einer Variablen.

Ich bin eher c/c++ Programmierer und hier muss ich schon stark umdenken. Vor allem was das debuggen angeht.

Noch ein Problem: Array!
Code:
loadVariablesNum("info.txt", 0);
var pix = bilder.split(";");
info.text = pix[0];
Warum ist nachher das Textfeld noch leer, gleiches Problem, Zugriff auf Array, bevor dieses erstellt wurde?

Kann ich das verhindern, in dem der erneute Zugriff im nächsten Frame kommt?
 
Warum ist nachher das Textfeld noch leer, gleiches Problem, Zugriff auf Array, bevor dieses erstellt wurde?
Ja.

Ebenso wie eine Variable zwar irgendwann - wie du in deinem zweiten Posting sagst - in einem Textfeld mit der entsprechenden Textfeldvariablen ankommt aber eben erst dann, wenn sie auch geladen ist. Erst dann kann deren Wert auch sonst weiterverarbeitet werden, also wie in deiner Zusatzfrage nicht vorher in einen Array aufgesplittet werden.
Genau das prüft das loadVars-Objekt ... und wie gewünscht ohne ein Textfeld.

Kann ich das verhindern, in dem der erneute Zugriff im nächsten Frame kommt?
Das wäre wie ein Wettrennen mit der Straßenbahn. Also zu beginnen, eine Fahrkarte (-> Textdatei) am Automat (-> Server) an der einen Straßenbahnstation (-> erster Frame) zu lösen (-> loadvariables), wenn die Straßenbahn (-> die Anwendung) dort gerade steht, und dann - da die Straßenbahn natürlich nicht wartet, bis der Automat das Ticket ausspuckt, zur nächsten Station (-> nächster Frame) zu rennen und dabei zu hoffen, dass die Straßenbahn dort nicht schon längst durch ist, wenn man da ankommt.

Es kann klappen, wenn man schnell genug rennen kann (vgl. Ladezeit abhängig von der Bandbreite/Servergeschwindigkeit/Dateimenge der zu ladenden Daten ... alles unwägbare Größen), muss es aber nicht. Insofern wäre diese Vorgehensweise keine sichere Methode um zu garantieren, dass etwas erst verarbeitet wird, wenn es auch vorhanden ist - selbst wenn man die Weiterverarbeitung erst im zehnten Frame statt schon im zweiten machen würde - sondern eher ein Glücksspiel. ;)

Wie gesagt: Schau dir das loadVars-Objekt an. Genau für diese (asynchrone) Prüfung und diese Problematik ist es ja da. :)

Gruß
Rena

PS: Nur zur Sicherheit, nicht dass es da ein Missverständnis gibt. Das empfohlene loadVars-Objekt ist was ganz anderes als der Befehl loadVariables oder loadVariablesNum, auch wenn es ähnlich heißt.
 
Zuletzt bearbeitet:
Zurück