Externe Textdatei in Flash mit AS3 laden

kalterjava

Erfahrenes Mitglied
Hi zusammen,

puhh, ich muss sagen, was sich zwischen AS1 und AS3 gaten hat, ist nicht leicht zu schlucken. Ich war und bin kein Profi in AS1 aber ein paar Funktionen habe ich hinbekommen. Leider habe ich jetzt mit der neuen Syntax, der strikten Typisierung noch echte Problem und so funktioniert meine Funktion auch nicht.

Diese Funktion hatte ich ins erste Bild eines MovieClips gelegt (Pfade angepasst). Das hat geklappt. Jetzt wolle ich es flexibler haben und wollte deshalb die Funktion auf _root auslagern, so dass man den MovieClip-Name als Parameter übergeben kann. Das trace gibt bei signal noch true aus, aber die onLoad-Anweisung findet nicht statt:

AS liegt auf _root 1. Schlüsselbild
PHP:
// Ext. Textdatei laden
function ladeText(mc_name:MovieClip, dateiname:String, zeilen:Number) {
	// Einlesen der Daten
	mc_name.loadVariables(dateiname);
	this.signal = true;
	
	this.onData = function() {
		for(i=1; i <= zeilen; i++){
			zeile_bild[i] = textdatei_zeile[i]; 
			zeile_bild[i].selectable = false;
		}//end for
	}//end onData
}//end function

// Methode aufrufen

ladeText(_root.bild4_mc, "textfelder.txt", 4);

Zur Erklärung:
zeile_bild1 = Variblenbezeichnung eines dyn. Textfeldes, das sich auf einer MovieClip-Zeitleiste befindet hier bild1_mc
zeile_bild2 = Variblenbezeichnung eines dyn. Textfeldes, das sich auf einer MovieClip-Zeitleiste befindet hier bild2_mc
usw.

Dem dynamischen Textfeld zeile_bild1 wird dann der Wert von textdatei_zeile1 (befindet sich in der externen txt-Datei)zugewiesen.
//Ausgabe: Text zu Textfeld 1

die externe Textdatei schaut so aus
PHP:
textdatei_zeile1 = Text zu Textfeld 1
&textdatei_zeile2 = Text zu Textfeld 2
&textdatei_zeile3 = Text zu Textfeld 3
&textdatei_zeile4 = Text zu Textfeld 4

Wär schön, wenn mir jmd. einen Tipp hätte.

Thanks!
 
Zuletzt bearbeitet:
Hi airegin,

ohh, das sagt mir überhaupt nichts. Das gabs zu AS 1.0 Zeiten sicher noch nicht oder?

Kannst du mir bezogen auf mein Problem helfen?

Ich versteh es nicht, warum es so kompliziert sein soll. Wenn das Skript auf einer MC-Zeiteiste liegt, liest er doch die Textdatei ein, also mit onLoad.

Wär nett, wenn du oder die anderen helfen könnten.

Thx.
 
Entschuldige mir würde da doch noch ein paar Dinge einfallen die du vielleicht noch testkönntest.

Code:
for(i=1; i <= zeilen; i++){
            trace(textdatei_zeile[i]);
            zeile_bild[i] = textdatei_zeile[i]; 
            zeile_bild[i].selectable = false;
        }//end for

Und noch eine Frage was genau wird in dem Array zeile_bild gespeichert?
 
Hi,

du brauchst dich doch nicht entschuldigen. Bin doch froh über deine Hilfe.

Zu deiner Frage:

i soll als Zählervariable nicht nur für die Schleife, sondern auch für die Textvariablen dienen, soll kein Array sein

PHP:
for(i=1; i <= zeilen; i++){ 
            zeile_bild[i] = textdatei_zeile[i];  
            zeile_bild[i].selectable = false; 
        }//end for

Da ich in der Textdatei die Variablen durchnummeriere

PHP:
textdatei_zeile1 = Text zu Textfeld 1
...

textdatei_zeile20 = Text zu Textfeld 20

kann ich ja diesen Zähler für die Nummerierung verwenden. Kann jedoch sein, dass das in AS3 nicht mehr oder anders geht.

Letztendlich soll die Funktion folgendes können:

textLaden(Ziel_MC, textdatei.txt, Anzahl der Variablen in der Textdatei diese wird in der for-Schleife übergeben)

also z.B.:

PHP:
//Methodenaufruf
textLaden(_root.bild2_mc, textdatei_fuer_bild2.txt, 5);

VG und Danke
 
Zuletzt bearbeitet:
Ahh ok langsam komm ich dahinter.

Wenn allerdings in der .txt Datei die Variable textdatei_zeile1 so heißt kannst du sie von Flash auch nur so aufrufen.

Was du allerdings machen könntest wäre eine zB durch | getrennte .txt Datei welche du reinlädst.

Code:
Text zu Textfeld 1|Text zu Textfeld 2|Text zu Textfeld 3|Text zu Textfeld 4

Nun verwendest du die Funktion split("|") um die Datei an den | zu trennen und in einem Array zu speichern.o
 
Nee, ich glaub du hattest recht. Ich habe aus irgendwelchen Gründen die Array-Objekterzeugung vergessen

Also so etwas:

PHP:
textzeilenArray = new Array();


textzeilenArray.length = zeilen; //Die Variable zeilen ist ein übergebener Parameter aus der Funktion 

for(var i=1; i < textzeilenArray.length; i++) {
      textzeilenArray[i-1] = _root.textdatei_zeile[i];
}

Vielleicht liegt es daran. Ich werde es erst morgen testen können.

Viele Grüße
 
Zuletzt bearbeitet:
Hi airigen,

ich bin weitergekommen, aber wie von mir vermutet liegt es an der neuen Syntax genauer an der strikten Typisierung:

Folgendes funktioniert:

PHP:
var textArray:Array = new Array();
		textArray.length = anzahl_zeilen; //Die Anzahl wird im Funktionsaufruf als Parameter übergeben 
		for(var i:Number=1; i < textArray.length; i++) {
 			textArray[i-1] = textdatei_zeile1; //textdatei_ziele1 ist der erste Variable, die in der .txt-Datei steht
			trace(textArray[0] + "Wert in Array 0")
		}//end for

Tausche ich jedoch die mittlere Zeile in der For-Anweisung wie folgt aus:

PHP:
textArray[i-1] = textdatei_zeile[i];

kommt die Fehlermeldung undefined oder NaN.

i ist ja vom Typ Number und textdatei_zeile1 ist ein String.
Früher ging es, dass man so einen Schleifenzähler mit [i] verbinden konnte in AS 3 anscheinend nicht mehr. Ich habe auch schon das versucht:

PHP:
textArray[i-1] = textdatei_zeile + toString(i);
oder einfach nur
textArray[i-1] = textdatei_zeile+i;

geht beides nicht.

Wär super, wenn du mir helfen könntest.

Viele Grüße
vom kaltenjava
 
Zuletzt bearbeitet:
Du willst also das textdatei_zeile[ i ] zu textdatei_zeile1 zum Beispiel wird.
Das geht allerdings so nicht mehr da textdatei_zeile1 eine Variable ist.
Was du mal versuchen kannst, ist in einem Array einfach die Variable textdatei_zeile1 ...
zu speichern. Dann dürfte es gehen.
 
Hi,

Du willst also das textdatei_zeile[ i ] zu textdatei_zeile1 zum Beispiel wird.
Das geht allerdings so nicht mehr da textdatei_zeile1 eine Variable ist.
Was du mal versuchen kannst, ist in einem Array einfach die Variable textdatei_zeile1 ...
zu speichern. Dann dürfte es gehen.

Letztendlich möchte ich das ganze so haben, dass man die Texte ohne Flash installiert zu haben, ändern kann.

Das bringt mich also nicht weiter, wenn ich textdatei_zeile1,2.....1000 in einem
Array speichere, da ich diese Anweisung in Flash machen und ändern muss.
Oder weißt du eine Funktion, die mir die Anzahl der Variablen in einer Textdatei zurückgibt?
Also etwas mit .length
Und dann bräuchte ich noch den Namen des Objekts, welches letztendlich die Variablen aus der externen .txt speichert und wie man darauf zugreifen kann.
Also im Prinzip so etwas wie ein XML-Objekt.

Ich weiß, mit einem XML-Objekt könnte man die Anzahl der Knoten ausgeben lassen und auf jeden Knoten einzeln zugreifen, jedoch ist das ändern eines Textes in so einem File für einen Laien unübersichtlich.

Viele Grüße
 

Neue Beiträge

Zurück