Flashhilfe.de - Flash Community

Variablen mit loadVariables in Array laden [Flash MX 2004]

 


AntwortenRegistrieren Seite1  

Ultim8#1
Benutzerbild von Ultim8
Beiträge: 9
Registriert: Mar 2004

24.03.2004, 18:49

hi
ich baue gerade eine seite für eine mmorpg gilde http://acme.mealora.de/flash.htm.
ich versuche eine preisliste zu basteln. es soll nach drei kategorien (name, kategorie, preis) sortiert werden können. habe hier im forum viel gelesen und ein script gefunden und etwas verändert.
leider bekomme ich es nicht hin variablen aus einer datei zu laden. es klappt zwar mit einem textfeld aber die sollen nur in den speicher um die in der array-sorier-funktion zu nutzen. vieles habe ich versucht vor die variablen in der textdatei ein & oder $ zu setzen, alles ohne leerzeichen zu schreiben oder hinter den zeilen das ; weg zu lassen, jedoch wird die datei anscheinend nicht richtig geladen.
ich bitte um hilfe, kann nicht mehr schlafen ;)

fla und text:
http://acme.mealora.de/fla/preisliste.zip

hier das script:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//Ausgabefelder leeren
function leeren(){
    feld1.text="";
    feld2.text="";
    feld3.text="";
    feld_ausgabe.text="";
}


/* Inahlt wie er aus einer txt-Datei geladen werden könnte
name0="Covert Faction Scanner";
kategorie0="Deed";
preis0=35000;

name1="Minefield";
kategorie1="Deed";
preis1=35000;

name2="Turret: Small Dish";
kategorie2="Deed";
preis2=140000;
*/



/*    Gibt die Anzahl der Gesamteinträge, muss also auch
    aus der txt-Datei angegeben werden
gesamt="3";*/


this.loadVariables("artikel.txt");

// Mehrdimensionales Array aus dem Inhalt erstellen
this.onData = function(){
alles = new Array();
for(i=0;i<gesamt;i++) {
    alles[i] = {name:this["name"+i],kategorie:this["kategorie"+i],preis:this["preis"+i]};
    }
}

// Sortier-Funktion
function order(a, b) {
    key1 = a[sortieren_nach];
    key2 = b[sortieren_nach];
   
  if (key1<key2) return -1;
  else if (key1>key2) return 1;
  else return 0;
}

/* Nach was das Array sortiert werden soll
(name, kategorie oder preis)
sortieren_nach = "name";
*/


// Aufruf der Sortier-Funktion
alles.sort(order);

// Ausgabe in Textfelder
function ausgabe() {
    for(i=0;i<gesamt;i++) {
        feld1.text += alles[i]["name"] + "\n";
        feld2.text += alles[i]["kategorie"] + "\n";
        feld3.text += alles[i]["preis"] + "\n";
        feld_ausgabe.text += alles[i]["name"]+"\t"+alles[i]["kategorie"]+"\t"+alles[i]["preis"] + "\n";
    }
}
ausgabe();

/* Ausgabe test
for(i=0;i<gesamt;i++) {
    trace(alles[i]["name"]+"-"+alles[i]["kategorie"]+"-"+alles[i]["preis"]);
}
*/

Geändert von Ultim8 am 24.03.04 um 19:00 Uhr
-=BoE=-#2
Benutzerbild von -=BoE=-
Beiträge: 144
Wohnort: B
Registriert: Nov 2003

25.03.2004, 15:07

ta-daa

soo sollte die Textdatei aussehen. Allerdings sind am Ende der Strings auch noch Zeilenumbrüche (\n). Da musst du wohl noch schneiden.

&name0=Covert Faction Scanner
&kategorie0=Deed
&preis0=35000
&name1=Minefield
&kategorie1=Deed
&preis1=35000
&name2=Turret: Small Dish
&kategorie2=Deed
&preis2=140000
&gesamt=3&

-=BoE=-
-=BoE=-
Ultim8#3
Benutzerbild von Ultim8
Beiträge: 9
Registriert: Mar 2004

Themenautor/in

26.03.2004, 01:18

wird leider immer noch nicht geladen. ich verstehe nicht genau was du mit schneiden meinst. die zeilenumbrüche weglassen? also ohne /n wird immer noch nichts angezeigt. vielleicht liegt es am script, ich kenne mich mit actionscrit nicht wirklich aus, kenne nur etwas die grundlagen von c++ :(

Manuel B#4
Benutzerbild von Manuel B
Beiträge: 4627
Registriert: May 2002

26.03.2004, 21:38

Kann die fla nicht öffnen (Flash 6 vs 7).
Aber die Textdatei sollte optimalerweise so aussehen.

&name0=Covert Faction Scanner&
&kategorie0=Deed&
&preis0=35000&
&name1=Minefield&
&kategorie1=Deed&
&preis1=35000&
&name2=Turret: Small Dish&
&kategorie2=Deed&
&preis2=140000&
&gesamt=3&

Das wird das Problem glaube ich nicht lösen. Aber es sei mal gesagt.

Was allerdings ein Problem ist:
Alles (!) sollte in den onData-Block integriert werden.
Sonst wird eventuell die sortier-function aufgerufen bevor das Array komplett gefüllt ist.


Zudem sieht diese Struktur verdammt nach XML aus.
Mach Dich darüber mal schlau. Hat Vorteile....



Manu

Flashhilfe.de :: Team
http://www.flashhilfe.de
__________________________
http://www.manuel-breitfeld.de
Geändert von Manuel B am 26.03.04 um 21:40 Uhr
Ultim8#5
Benutzerbild von Ultim8
Beiträge: 9
Registriert: Mar 2004

Themenautor/in

27.03.2004, 03:42

tausend dank! ich liebe dieses forum :D
der fehler lag daran, dass nicht alles in der onData function stand.

Ultim8#6
Benutzerbild von Ultim8
Beiträge: 9
Registriert: Mar 2004

Themenautor/in

27.03.2004, 04:55

hmm zu früh gefreut. nun kann ich die funktionen nur ein mal benutzen.
habe drei buttons
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//eins
on (release) {
   alles.sort(order);
   sortieren_nach = "name";
   leeren();
   ausgabe();
}

//zwei
on (release) {
   alles.sort(order);
   sortieren_nach = "kategorie";
   leeren();
   ausgabe();
}

//drei
on (release) {
   alles.sort(order);
   sortieren_nach = "preis";
   leeren();
   ausgabe();
}


leider werden die funktionen nicht ausgeführt, liegt an der onData funktion, nur wie löst man das problem?

habe die *.fla als flash6 abgespeichert
http://acme.mealora.de/fla/preisliste.zip

und das skript falls die fla nicht funktioniert
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
this.loadVariables("artikel.txt");

this.onData = function() {
   
   // Mehrdimensionales Array aus dem Inhalt erstellen
   alles = new Array();
   for (i=0; i<gesamt; i++) {
      alles[i] = {name:this["name"+i], kategorie:this["kategorie"+i], preis:this["preis"+i]};
   }
   
   // Sortier-Funktion
   function order(a, b) {
      key1 = a[sortieren_nach];
      key2 = b[sortieren_nach];
      if (key1<key2) {
         return -1;
      } else if (key1>key2) {
         return 1;
      } else {
         return 0;
      }
   }
   
   // Nach was das Array sortiert werden soll
   // (name, kategorie oder preis)
   sortieren_nach = "preis";
   
   // Aufruf der Sortier-Funktion
   alles.sort(order);
   
   // Ausgabe in Textfelder
   function ausgabe() {
      for (i=0; i<gesamt; i++) {
         feld1.text += alles[i]["name"]+"\n";
         feld2.text += alles[i]["kategorie"]+"\n";
         feld3.text += alles[i]["preis"]+"\n";
         feld_ausgabe.text += alles[i]["name"]+"\t"+alles[i]["kategorie"]+"\t"+alles[i]["preis"]+"\n";
      }
   }
   ausgabe();
   
   // Ausgabefelder leeren
   function leeren() {
      feld1.text = "";
      feld2.text = "";
      feld3.text = "";
      feld_ausgabe.text = "";
   }
}


Manuel B#7
Benutzerbild von Manuel B
Beiträge: 4627
Registriert: May 2002

27.03.2004, 08:13

Na, dann steck eben nicht die function in die onData-Function, sondern nur deren Aufruf.

Damit Du keine Pfadprobleme bekommst, könntest Du die Function global defninieren.

_global.order = function (a, b) {
...


Manu

Flashhilfe.de :: Team
http://www.flashhilfe.de
__________________________
http://www.manuel-breitfeld.de
Geändert von Manuel B am 27.03.04 um 08:16 Uhr
Ultim8#8
Benutzerbild von Ultim8
Beiträge: 9
Registriert: Mar 2004

Themenautor/in

27.03.2004, 11:23

yippie, habs sogar hingekriegt den preis als integer darzustellen. wenn jetzt noch der tausender-stellen-punkt möglich wäre...aber das ist wohl zu viel ;) dann müste man ja wieder von integer zu string...

hier das funktionierende skript (falls jemand mal das gleiche bastelt)

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
   // Sortier-Funktion
   function order(a, b) {
      key1 = a[sortieren_nach];
      key2 = b[sortieren_nach];
      if (key1<key2) {
         return -1;
      } else if (key1>key2) {
         return 1;
      } else {
         return 0;
      }
   }
   
   // Ausgabe in Textfelder
   function ausgabe() {
      for (i=0; i<gesamt; i++) {
         feld1.text += alles[i]["name"]+"\n";
         feld2.text += alles[i]["kategorie"]+"\n";
         feld3.text += alles[i]["preis"]+"\n";
         feld_ausgabe.text += alles[i]["name"]+"\t"+alles[i]["kategorie"]+"\t"+alles[i]["preis"]+"\n";
      }
   }
   
   // Ausgabefelder leeren
   function leeren() {
      feld1.text = "";
      feld2.text = "";
      feld3.text = "";
      feld_ausgabe.text = "";
   }
      
this.loadVariables("artikel.txt");
this.onData = function() {   

   // Mehrdimensionales Array aus dem Inhalt erstellen
   //Preis wird zu Integer
   alles = new Array();   
   for (i=0; i<gesamt; i++) {   
      alles[i] = {name:this["name"+i], kategorie:this["kategorie"+i], preis:parseInt(this["preis"+i])};
   }

   // Nach was das Array sortiert werden soll
   // (name, kategorie oder preis)
   sortieren_nach = "preis";
   // Aufruf der Sortier-Funktion
   alles.sort(order);
   //Ausgabe
   ausgabe();
}



Manuel B#9
Benutzerbild von Manuel B
Beiträge: 4627
Registriert: May 2002

27.03.2004, 11:24

Toll, freut mich!

Und für uns ist nichts zu viel...
Hier Deine Tausender-Punkte:
>> http://www.flashhilfe.de/go/prototype/kommentare&id_forum=85947&kat=16&seite=0


Manu

Flashhilfe.de :: Team
http://www.flashhilfe.de
__________________________
http://www.manuel-breitfeld.de
H@ilo#10
Benutzerbild von H@ilo
Beiträge: 15261
Wohnort: Bremen
Registriert: Jan 2002

27.03.2004, 11:53

Und wenn du das mit den 1000er Punkten auf die Reihe gebracht hast, machst du ein kleines Beispielmovie, zippst das inkl. Textfile und stellst es dem Downloadbereich zur Verfügung ;o)


H@ilo
Freizeitflasher
H@ilo
Freizeitflasher
Ultim8#11
Benutzerbild von Ultim8
Beiträge: 9
Registriert: Mar 2004

Themenautor/in

01.04.2004, 03:05

@ H@ilo: werd ich später machen, habs hingekriegt.

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
   // Tausenderstellen-punkt
   Number.prototype.format = function( vorkomma,nachkomma,char_komma,char_tausend ) {
        if( char_komma=="" )    char_komma = ",";
        if( nachkomma=="" )        nachkomma = 2;
        if( vorkomma=="" )        vorkomma = 0;
        var t1 = Math.floor( (this*Math.pow(10,nachkomma)) ).toString().split("");
        var t2 = vorkomma;
        var t4 = "";
        if( t1.length-nachkomma<vorkomma )
        for(var i=t1.length-nachkomma-vorkomma; i<0; i++) t1.unshift("0");
        while( t1.length>0 ) {
                var t3 = t1.pop();
                if( --nachkomma>=0 ) t4 = t3+t4;
                if( nachkomma==0 )    t4 = char_komma+t4;
                if( nachkomma<0 ) if( --t2>0 || t1.length==0 )
                t4 = t3+t4;
                else {
                        t2 = vorkomma;
                        t4 = char_tausend+t3+t4;
                }
        }
        return t4;
   }


   // Sortier-Funktion
   function order(a, b) {
      key1 = a[sortieren_nach];
      key2 = b[sortieren_nach];
      if (key1<key2) {
         return -1;
      } else if (key1>key2) {
         return 1;
      } else {
         return 0;
      }
   }
   
   // Ausgabe in Textfelder
   function ausgabe() {
      for (i=0; i<gesamt; i++) {
         feld1.text += alles[i]["name"]+"\n";
         feld2.text += alles[i]["kategorie"]+"\n";
         preis_temp = alles[i]["preis"];
         //Preisausgabe mit Kommastellen
         feld3.text += preis_temp.format(3,0,",",".")+"\n";
         feld_ausgabe.text += alles[i]["name"]+"\t"+alles[i]["kategorie"]+"\t"+alles[i]["preis"]+"\n";
         
      }
   }
   
   // Ausgabefelder leeren
   function leeren() {
      feld1.text = "";
      feld2.text = "";
      feld3.text = "";
      feld_ausgabe.text = "";
   }


// laden der Variablen aus einer Textdatei
this.loadVariables("artikel.txt");
this.onData = function() {   

   // Mehrdimensionales Array aus dem Inhalt erstellen
   //Preis wird zu Integer
   alles = new Array();   
   for (i=0; i<gesamt; i++) {   
      alles[i] = {name:this["name"+i], kategorie:this["kategorie"+i], preis:parseInt(this["preis"+i])};
   }

   // Nach was das Array sortiert werden soll
   // (name, kategorie oder preis)
   sortieren_nach = "preis";
   // Aufruf der Sortier-Funktion
   alles.sort(order);
   //Ausgabe
   ausgabe();
}




nun stehe ich vor dem nächsten problem. ich möchte in einem anderen movie ebenfalls die artikel.txt laden und die variablen in textfeldern im "Var:  "-feld benutzen. bei den string-variablen ist es ja kein problem. beim preis muss ich wieder die tausender punkte setzen. also alle preise erst in integer umwandeln. danach mit der tausender-punkt-funktion mit punkten versehen und wieder zum ursprünglichen variablennamen umändern.
ohne schleife also folgendes machen:
ActionScript:
1
2
3
4
5
preis0=parseInt(preis0);
preis0=preis0.format(3,0,",",".");

preis1=parseInt(preis1);
preis1=preis1.format(3,0,",",".");


nur wie bekomme ich das in einer schleife hin? ist es ohne array überhaupt möglich? habe schwierigkeiten mit arrays.

schonmal danke im voraus :D




AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2022 Sebastian Wichmann - Flashhilfe.de