Variable Variablen aus TXT importieren

Wessy

Erfahrenes Mitglied
Hallo alle zusammen,

Standardtext: Hab überall schon gesucht und gegoogelt. Leider nichts zu meinem Problem gefunden.

Des weiteren habe ich mir auch schon einige Nächte um die Ohren gehauen. Aber nun zu meinem unüberwindbaren Problem:

Ich habe vor, ein schickes Intro für einen eSport-Clan zu basteln. Das designerische ist nicht das Problem, nur das technische. Denn wenn das Intro nicht skalierbar ist (im Hinblick auf die Memberliste), ist es auch nicht wirklich gut.

Alles klar, habe nun alle Membernamen in eine *.txt geschrieben und lade mir diese dann in Flash (Inhalt der TXT: &name=Name1, Name2, Name3). Funktioniert auch wunderbar, nur möchte ich pro Member eine Seite machen. Sprich: Wenn ich z.B. 7 Member habe, wird ein Teil des Intros 7 mal mit unterschiedlichen Namen durchlaufen. Also ein dyn Textfeld mit der Variable "name" und vor Ablauf soll die komplette Variable am Trennzeichen "," geteilt werden (z.B. in ein Array welches ich dann über die Indexe ansprechen kann).
Z.B.:
Frame 0:
loadVariables("namen.txt", "_root"); //<- Lade Variable name aus TXT
name_komplett = name.split(",");
// <- Splitte am Komma auf und packe in Variable (als array)
$i = 0;
//<- counter für das array
Frame 1:
name = name_komplett[$i]; //<- Nächsten Namen in "name" schreiben
$i++; //<- Counter einen hoch
if (name == ""){gotoAndPlay(10);} //<- ab die Post zum Video und play
gotoAndPlay(40); // <- überspringt die Videos und spielt den Schluss

Das Video ab Frame 10 Spielt z.B. bis Frame 39 und springt dann auf Frame 1 zurück. Somit soll das nächste Array geladen werden und in "name" gepackt werden....

wo ist der Fehler? Ich denke, das man ext. Variablen nur in Textfelder packen kann. Oder kann ich die ext. Variable auch in der Funktion Split ansprechen und in das Array splitten

Für Hilfe wäre ich sehr dankbar.....
 
Hi,
erstmal, bitte pack deinen Code in ein Codezitatfenster. $var ist PhP. ohne $ ist as.
Ab Flash MX kannst du statt loadVariables das LoadVars-Objekt nehmen, viel einfacher zu handhaben und auch für deinen Fall günstiger.
z.b.
PHP:
members = new LoadVars();
members.Load("bla.txt");
members.onLoad = function () { sülz; }
Es könnte sein das einige deiner Probleme daher kommen, dass das externe Laden meist langsamer ist als das Fortschreiten deiner Frames im Film. Mit onLoad...umgehst du das,
da die Befehle dann erst ausgeführt werden wenn geladen ist. Die einzelnen Variablen aus der Datei kannst du mit members.name ansprechen. Dann kannst du alles damit machen, ausser essen ;)
Ich würde vielleicht erst alles aus der Datei laden. Dann alles in Array schreiben, das dann verarbeiten. Nicht alles pro Name in einer Schleife. Wäre aber nur mein Stil.
Den Rest bekommst du möglicherweise selbst herraus.

Gruss.
 
Erst mal vielen Dank für deine rasche Antwort.

Mein Problem ist nicht das die Variablen nicht geladen werden, dies ist momentan noch nicht mein Problem (spiele die Flash-Datei lokal ab), eher das ich die Variable nur direkt in einem Textfeld ansprechen kann. Also steht in meiner TXT-Datei "name=Member1, Member2, Member3". In Flash kann ich dann nur ein Textfeld machen mit der Variable drin. Also würde dann auf der Seite stehen "Member1, Member2, Member3".

Ich möchte aber die Member direkt ansprechen. Also eine Seite für Member1, eine Seite für Member2 und eine Seite für Member3. Dazu habe ich vor, den String am "," zu trennen und in ein Array zu packen. Der Vorteil dieser Methode ist, das ich beliebig viele Namen in meiner Textdatei angeben kann, nicht wie bei vordefinierten Variablen. Sicher, machbar wäre auch in die TXT-Datei mit verschiedenen Variablen (name1=....&name2=......&name3=.....), nur fehlt hierbei die skalierbarkeit weil ich vorher ein max. festlegen muss...

Kann mir dabei denn niemand helfen...?
 
Hi,

nö, Du musst nicht unbedingt ein Maximum angeben:
PHP:
lv = new LoadVars();
lv.load("blabla");
lv.onLoad = function() {
    for (var i in this) {
	    trace(i + " ist: " + this[i]);
    }
}

Gruß
.
 
Erst einmal vielen herzlichen Dank für die klasse Antwort (Denkanstoss). Habe mir das Script zur Brust genommen und rumprobiert. Wie du in deiner Signatur schreibst, ist "Trace" wirklich mein Freund geworden.

Leider bin ich zwar noch nicht ganz schlau geworden, wie die geladenen Daten in das Asz. Array "this" kommen, aber ich kann es ansprechen... (genau das was ich wollte).

Habe das kleine Script noch ein bischen erweitert:

PHP:
  lv = new LoadVars();
  lv.load("soldaten.txt");
  lv.onLoad = function() {
 					 for (var i in this) {
 		 			 _global.name_komplett = this[i].split(","); // <- kompletten String einlesen und an "," splitten (array)
 		 			 break; //<- damit mein Array nicht wieder mit einem leeren String überschrieben wird
 						 }
  					   }
  x = 0;
  trace("name_soldat = " + name_komplett[x]);

Was mich jedoch noch sehr verwundert, das ich die Variable nur in der Funktion ohne Probleme ansprechen kann. Also wenn ich z.B. die Funktion wie folgt schreiben würde:

PHP:
  lv.onLoad = function() {
 					 for (var i in this) {
 		 			 name_komplett = this[i].split(",");
 						 x = 0; //<- neu
 						 trace("name_soldat = " + name_komplett[x]);//<- neu
 		 			 break;
 						 }
  					   }

Mein oberes Script funktioniert nicht einwandfrei. Die Variablen werden erst beim zweiten Mal starten geladen (siehe Anhang). Aber ich muss die Variablen wie oben gezeigt ansprechen, sonst kann ich nicht nach jeder durchlaufenen Szene einen neuen Namen aus dem Array "name_komplett" ziehen.

PS.: Es läuft alles lokal ab!

Wenn du mir noch einmal einen Tip geben könntest, wäre ich sehr dankbar..... Gruß der Wessy!
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    17,2 KB · Aufrufe: 118
Hi,

was genau Dein Problem ist, habe ich nicht wirklich verstanden, aber: Dein erstes Script ist meiner Meinung nach Blödsinn; entweder, Du holst Dir alle Variablen mit einer Schleife, oder Du hast nur eine Variable, die Du mit split() trennen musst. Wenn Du die Schleife nach dem ersten Aufruf beendest, kannst Du Dir die Schleife auch sparen. ;) Mein Beispiel bezog sich auf die Verwendung einer Anzahl Variablen, die nicht mehr getrennt werden müssen.

Gruß

P.S.: In der Schleife würde ich noch mit typeof testen, ob wirklich Strings ankommen. Grund: Ein Test hat ergeben, dass Du so zusätzlich noch ein [Type Function] bekommst, wie beim Auslesen eines "nackten" LoadVars..toString();
.
 
Bei Durchlaufen eine LoadVars Objektes mit einer for Schleife muss man darauf achten, das das Objekt[0] vom eventuell vorhandenen onLoad Handler belegt sein kann, deswegen das Function[function], dagegen einfach +1 in der name_komplett = this[i].split(","); Zeile einfügen....

B
 
Hey, super vielen Dank für die Antworten. Ich werde mich gleich nach der Arbeit ans umsetzen machen. Nur glaube ich, das ihr zu viel von mir erwartet. Ich scripte schon sehr lange mit CGI und PHP, aber Flash (Scripting) ist sehr neu für mich.

Basileus, du sprichst in ?.... Leider nichts verstanden (hast aber wohl auch eher Datic gemeint :) ). Aber Danke fürs Interesse am Threat.

Ehm, warum ich das Break eingebaut habe, weil ich den Aufruf "var i in this" nicht verstehe und auch nicht in eine eigenständige Anweisung packen konnte (muss ich das überhaupt?). Ist "this" ein Objekt, welches nach "lv.load("soldaten.txt");" automatisch zur Verfügung steht?

Dann könnte ich den Aufruf auch wie folgt gestalten
PHP:
    lv = new LoadVars();
    lv.load("soldaten.txt");
    lv.onLoad = function() {
 				_global.name_komplett = this["name"].split(",");
   //<- "name" ist die Variable aus der TXT
 						 }

Aber dann besteht immer noch das Problem, das ich einfach nach Aufruf meiner Flash-Datei noch keine Variablen zur Verfügung habe (wie in meinem letzten Post beschrieben). Ich muss die Flash-Datei noch ein zweites mal starten, um wirklich die Variablen auch auslesen zu können. Abhilfe würde da möglicherweise folgendes bringen.

PHP:
    lv = new LoadVars();
    lv.load("soldaten.txt");
    lv.onLoad = function() {
 				_global.name_komplett = this["name"].split(","); 
  //<- "name" ist die Variable aus der TXT
   if (name_komplett[0] != ""){gotoAndPlay(5);}
 						 }
   stop();

"typeof" ist mir bislang unbekannt, aber auch das, werde ich mir später einmal anschauen....

Sorry fals ich mich an manchen Stellen etwas wirr ausdrücke..... :)

PS.: Vielen Dank für eure Antworten....
 

Neue Beiträge

Zurück