Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-06-2005, 09:42   #1 (permalink)
scriptvermurkser
 
Benutzerbild von SwKy
 
Registriert seit: Apr 2003
Beiträge: 269
Script-Murks?

Also, ich weiß nicht. Ich hab da mal was gescriptet. Und ich frage mich, ob das nicht totaler Murks ist und viel einfacher und übersichtlicher ginge.
Das Problem bei mir ist, dass ich meine Scripte immer Schrittweise verfasse: also erst mal muss das funktionieren und dann merke ich, dass ja dann was anderes auch funktionieren muss und dann, dass hier noch was ins Script rein muss, damit...
Ich habe also vorher nicht die Vorstellung, wie das Script (in etwa) aussehen muss. Und ich glaube dadurch werden meine Scripte oft recht komplizier und durcheinander, und bestimmt auch manchmal rechenaufwendiger als nötig.

Also es war folgendes umzusetzten:
Eine Deutschlandkarte in PLZ-Gebiete aufgeteilt. Jedes PLZ-Gebiet ist ein But.
Bei Klick auf den But erscheinen die entsprechenden Daten (PLZ, Ort, Tel., Nr.).
Die Daten sind in txt-Dateien gespeichert, die jeweils "Array + 1.Nr.d.PLZ" heißen, und zwar so: PLZ1, Ort1, Tel.1, Nr.1; PLZ2, Ort2, Tel.2, Nr.2 ...

und hier ist mein Script:

ActionScript:
  1. var scrpInhalt = scrpInstanzname.getScrollContent (); //in scrpInhalt wird der Inhalt meiner Scrollpane gespeichert
  2.  
  3. function ticker(ziel) {
  4.     var tx = ziel.text;
  5.     tx = tx.substr(1, tx.length) + tx.substr(0, 1);
  6.     ziel.text = tx;
  7. }
  8.  
  9. MovieClip.prototype.myPLZ = function(){
  10.     this.onRollOver = function(){
  11.         this.gotoAndStop(2);
  12.     }
  13.     this.onRollOut = function(){
  14.         this.gotoAndStop(1);
  15.     }
  16.     this.onRelease = function(){
  17.         this.gotoAndPlay(3);
  18.         mystring = "...Bitte haben Sie einen Augenblick Geduld, die Daten werden geladen...";
  19.         Geduld.text = mystring;
  20.         setInterval(ticker, 96, Geduld);
  21.         if(geklickt != undefined){ //fragt ab, ob schon mal ein But geklickt wurde
  22.             for (tfnr=0; tfnr<=x; tfnr++) {
  23.                 scrpInhalt["tf_"+tfnr].removeTextField();//wenn ja, werden die bestehenden txt-felder gelöscht...
  24.                 }   
  25.             with(geklickt){
  26.                 gotoAndStop(1); //...der zuvor geklickte But wieder in seine Ausgangsposition gebracht...
  27.                 enabled = true //... aktiviert...
  28.                 _name = wert //...und ihm wieder der ursprüngliche Instanzname gegeben.
  29.             }   
  30.         }
  31.         wert = this._name
  32.         this._name = "geklickt" //der neu geklickte But wird "geklickt" genannt...
  33.         geklickt.enabled = false //...und deaktiviert
  34.        
  35.        
  36.     LadeObj = new LoadVars();
  37.     x=0 // Nummer wird bei jedem onEnterFrame +1
  38.     n=0// Nummer wird bei jedem onEnterFrame +1, wenn durch 4 teilbar, wieder 0
  39.     m=0 // Nummer wenn n % 4 = 0 dann m + 1
  40.     i=0 // für x-Koordinate des neuen Textfeldes
  41.     h=0 // y-Koordinate des neuen Textfeldes
  42.     t=0 // macht die Breite der ersten Textfelder kürzer
  43.  
  44.     LadeObj.onLoad = function(success) {
  45.         if(success) {
  46.             meinArray = LadeObj.adr.split(";"); //mein geladener Text wird bei ; gesplited...
  47.             meinArray.sort(); // und sortiert
  48.             onEnterFrame = function() {
  49.                 neuArray = meinArray[m].split(","); //mein dadurch entstandenes array wird bei , gesplited
  50.                 scrpInhalt.createTextField(("tf_"+x),x,5+i,2+h,50+t,22);// in meiner Scrollpane wird ein Textfeld erstellt
  51.                 t=120 // bewirkt, das alle jetzt entstehenden txt-Felder breiter werden
  52.                 //scrpInhalt["tf_"+x].border = true;
  53.                 scrpInhalt["tf_"+x].selectable = true
  54.                 scrpInhalt["tf_"+x].embedFonts = true
  55.                 mf = new TextFormat();
  56.                 mf.font = "arial";
  57.                 mf.size = 12;
  58.                 scrpInhalt["tf_"+x].text = neuArray[n]// setzt den Inhalt des jeweiligen Textfeldes
  59.                 scrpInhalt["tf_"+x].setTextFormat(mf);
  60.                 x = x+1
  61.                 n = n+1
  62.                 i = i+170
  63.                 if(n==1){ // bewirkt, dass die txt-felder nach dem ersten länger sind
  64.                     i=i-120
  65.                     }else if((n%5) == 0){
  66.                         i=i+120
  67.                         }
  68.                 if((n%4) == 0){// bewirkt, dass nach 4 txt-feldern eine neue Reihe angefangen wird...
  69.                     n=0
  70.                     m = m+1
  71.                     h = h+18 //sorgt dafür, dass das nächste txtfeld weiter unten erstellt wird
  72.                     i=0 //sorgt dafür, dass das erste txtfeld wieder kurz ist
  73.                     t=0
  74.                     }
  75.                 if(x==meinArray.length*4){ //beendet das Ganze, wenn keine Elemente mehr im Array sind
  76.                     scrpInstanzname.refreshPane ();
  77.                     Geduld.text = ""
  78.                     delete this.onEnterFrame;
  79.                 }
  80.             }
  81.         }
  82.     }
  83. LadeObj.load("Array"+wert+".txt");}
  84. }

und nu sacht ma was dazu und wenn der eine oder andere das/was aus dem Script gebrauchen kann, würds mich auch freun

Geändert von SwKy (03-06-2005 um 09:44 Uhr)
SwKy ist offline   Mit Zitat antworten
Alt 03-06-2005, 09:53   #2 (permalink)
oEF(etischist)
 
Registriert seit: Dec 2003
Ort: muc
Beiträge: 664
also:
mir geht es oftmals genau so. Etas, hat man bei der Überlegung vergessen, wird dann noch schnell reingebaut... und so wächst der Code!
Du könntest so etwas vielleicht in funktionen auslagern, dann werden deine Blöcke nicht zu gross. Aber da Du viel kommentiert hast (weit mehr, als der durchschnitt, würde ich sagen -> *lob*) ist eigentlich alles recht gut lesbar.
Einzig: warum machst Du ein onEnterFrame? Um deine textfelder zu erstellen währe Doch eine for-Schleife sinnvoler? oder willst DU das die Felder sichtbar nacheinander erstellt werden?
Funktionalität habe ich übrigends nicht geprüft, sondern nur generelle Verständlichkeit.
meinArray ist vielleicht nicht die geglückteste Bezeichnung für eine Variable

grüße,
solo
soloFlash ist offline   Mit Zitat antworten
Alt 03-06-2005, 10:06   #3 (permalink)
scriptvermurkser
 
Benutzerbild von SwKy
 
Registriert seit: Apr 2003
Beiträge: 269
funktionieren tuts

@soloFlash: ach so, eine for-schleife läd erst alles und zeigt es dann? Ist eine For-schleife weniger rechenintensiv? Dass man es sieht, wenn sich das ganze aufbaut, find ich ok, dann sieht man wenigstens, das was passiert, aber es dauert schon recht lang.
SwKy ist offline   Mit Zitat antworten
Alt 03-06-2005, 12:14   #4 (permalink)
oEF(etischist)
 
Registriert seit: Dec 2003
Ort: muc
Beiträge: 664
Hi,

onEnterFrame: ist eine Art-Schleife, die bei jedem Frame (abhängig von Framezahl pro Sekunde, und von der Belastung des Rechners) durchlaufen wird. Solange bis Du es mit delete löschst, oder überschreibst. Damit kannst Du zeitliche Abläufe gut darstellen.

for-schleifen: laufen innerhalb eines Frames ab, und zwar komplett. Der Anwender sieht nur das Endergebnis.

Über rechnerleistung kann ich nichts sagen ;(

Unter "Aufbau" verstehe ich eher, dass die felder irgendwie nett animiert auf der bühne erscheinen, nicht dass sie einzeln kreiert werden.

lies Dir mal was zu onEnterFrame durch.

grüße,
solo
soloFlash ist offline   Mit Zitat antworten
Alt 03-06-2005, 13:20   #5 (permalink)
scriptvermurkser
 
Benutzerbild von SwKy
 
Registriert seit: Apr 2003
Beiträge: 269
bin ich grad zu blöd???

wollte das mit der for-Schleife mal ausprobieren. Hab das jetzt so gemacht:

ActionScript:
  1. var scrpInhalt = scrpInstanzname.getScrollContent (); //in scrpInhalt wird der Inhalt meiner Scrollpane gespeichert
  2.  
  3. function ticker(ziel) {
  4.     var tx = ziel.text;
  5.     tx = tx.substr(1, tx.length) + tx.substr(0, 1);
  6.     ziel.text = tx;
  7. }
  8.  
  9. MovieClip.prototype.myPLZ = function(){
  10.     this.onRollOver = function(){
  11.         this.gotoAndStop(2);
  12.     }
  13.     this.onRollOut = function(){
  14.         this.gotoAndStop(1);
  15.     }
  16.     this.onRelease = function(){
  17.         this.gotoAndPlay(3);
  18.         mystring = "...Bitte haben Sie einen Augenblick Geduld, die Daten werden geladen...";
  19.         Geduld.text = mystring;
  20.         setInterval(ticker, 72, Geduld);
  21.         if(geklickt != undefined){ //fragt ab, ob schon mal ein But geklickt wurde
  22.             for (tfnr=0; tfnr<=x; tfnr++) {
  23.                 scrpInhalt["tf_"+tfnr].removeTextField();//wenn ja, werden die bestehenden txt-felder gelöscht...
  24.                 }   
  25.             with(geklickt){
  26.                 gotoAndStop(1); //...der zuvor geklickte But wieder in seine Ausgangsposition gebracht...
  27.                 enabled = true //... aktiviert...
  28.                 _name = wert //...und ihm wieder der ursprüngliche Instanzname gegeben.
  29.             }   
  30.         }
  31.         wert = this._name
  32.         this._name = "geklickt" //der neu geklickte But wird "geklickt" genannt...
  33.         geklickt.enabled = false //...und deaktiviert
  34.            
  35.     LadeObj = new LoadVars();
  36.     x=0 // Nummer wird bei jedem onEnterFrame +1
  37.     n=0// Nummer wird bei jedem onEnterFrame +1, wenn durch 4 teilbar, wieder 0
  38.     m=0 // Nummer wenn n % 4 = 0 dann m + 1
  39.     i=0 // für x-Koordinate des neuen Textfeldes
  40.     h=0 // y-Koordinate des neuen Textfeldes
  41.     t=0 // macht die Breite der ersten Textfelder kürzer
  42.  
  43.     LadeObj.onLoad = function(success) {
  44.         if(success) {
  45.             meinArray = LadeObj.adr.split(";"); //mein geladener Text wird bei ; gesplited...
  46.             meinArray.sort(); // und sortiert
  47.             for(f=1;f==1;f=1) {
  48.                 neuArray = meinArray[m].split(","); //mein dadurch entstandenes array wird bei , gesplited
  49.                 scrpInhalt.createTextField(("tf_"+x),x,5+i,2+h,50+t,22);// in meiner Scrollpane wird ein Textfeld erstellt
  50.                 t=120 // bewirkt, das alle jetzt entstehenden txt-Felder breiter werden
  51.                 //scrpInhalt["tf_"+x].border = true;
  52.                 scrpInhalt["tf_"+x].selectable = true
  53.                 scrpInhalt["tf_"+x].embedFonts = true
  54.                 mf = new TextFormat();
  55.                 mf.font = "arial";
  56.                 mf.size = 12;
  57.                 scrpInhalt["tf_"+x].text = neuArray[n]// setzt den Inhalt des jeweiligen Textfeldes
  58.                 scrpInhalt["tf_"+x].setTextFormat(mf);
  59.                 x = x+1
  60.                 n = n+1
  61.                 i = i+170
  62.                 if(n==1){ // bewirkt, dass die txt-felder nach dem ersten länger sind
  63.                     i=i-120
  64.                     }else if((n%5) == 0){
  65.                         i=i+120
  66.                         }
  67.                 if((n%4) == 0){// bewirkt, dass nach 4 txt-feldern eine neue Reihe angefangen wird...
  68.                     trace("nächste Reihe");
  69.                     n=0 
  70.                     m = m+1
  71.                     h = h+18 //sorgt dafür, dass das nächste txtfeld weiter unten erstellt wird
  72.                     i=0 //sorgt dafür, dass das erste txtfeld wieder kurz ist
  73.                     t=0
  74.                     }
  75.                 if(x==meinArray.length*4){ //beendet das Ganze, wenn keine Elemente mehr im Array sind
  76.                     scrpInstanzname.refreshPane ();
  77.                     Geduld.text = ""
  78.                     trace("eigentlich zu Ende"),
  79.                     f=2;
  80.                 }
  81.             }
  82.         }
  83.     }
  84. LadeObj.load("texte/Array"+wert+".txt");}
  85. }

nicht grad elegant, aber funktionieren müßte es doch, oder?
mir wird "eigentlich zu Ende" getraced, also wird f doch auf 2 gesetzt, das müsste die Schleife doch beenden, oder? tut es aber nicht. Flash fragt mich dann irgendwann, ob ich abbrechen will, oder lieber warten, bis der Rechner abstürzt.
SwKy ist offline   Mit Zitat antworten
Alt 03-06-2005, 14:13   #6 (permalink)
oEF(etischist)
 
Registriert seit: Dec 2003
Ort: muc
Beiträge: 664
wie nett, das Flash frägt

for(<startwert setzen>;<Abbruchbedingung>;<Wertveränderung>)

in Deinem fall so (ohne gewähr, schnell hingeklatscht von mir):
for(x=1;x<=meinArray.length*4;x++)

ach ja, die Zeile mit "x = x+1" muss dan raus, ebenso Deine Abbruchabfrage unten im Coding.

Vielleicht mal mit Schleifen beschäftigen (DO, WHILE, FOR)?!?!

wenn probleme, dann fragen.
solo

Geändert von soloFlash (03-06-2005 um 14:14 Uhr)
soloFlash ist offline   Mit Zitat antworten
Alt 03-06-2005, 14:29   #7 (permalink)
scriptvermurkser
 
Benutzerbild von SwKy
 
Registriert seit: Apr 2003
Beiträge: 269
Ja. Mein Flash redet mit mir. Deins nicht??? (manchmal reden wir auch aneinander vorbei )


... probier ich mal. danke.

Geändert von SwKy (03-06-2005 um 14:30 Uhr)
SwKy ist offline   Mit Zitat antworten
Alt 03-06-2005, 15:34   #8 (permalink)
scriptvermurkser
 
Benutzerbild von SwKy
 
Registriert seit: Apr 2003
Beiträge: 269
Zitat:
Vielleicht mal mit Schleifen beschäftigen (DO, WHILE, FOR)?!?!
Ich hatte mich natürlich mit Schleifen beschäftigt, jedenfalls mit for, denn das wollte ich ja benutzen. Wollte es auch so machen, wie du, dachte aber das geht nicht, weil ich x ja das erste mal als 0 brauch. Ich wußte nämlich nicht, dass erst die Schleife durchläuft und dann der nächste Ausdruck ausgewertet wird.
Aber wo der Unterschied zwischen den drein (do,while, for) ist, außer in der Art wie sie angewendet werden, hab ich nicht verstanden.

Hier nun mein Schleifenbericht:

for: geht bei nicht so vielen Textfeldern sehr schnell (schneller als EnterFrame); bei vielen Textfeldern dauert es länger als EnterFrame und will auch dauernd abbrechen.

mit while ist es genauso.

onEnterFrame braucht zwar bei wenigen Textfeldern etwas länger, ackert das ganze aber brav bis zum Schluß durch.

Ergo: ich muss onEnterFrame lassen, oder hat jemand eine andere Idee? Oder sollte man so was gar nicht mir Flash lösen?

Geändert von SwKy (03-06-2005 um 15:38 Uhr)
SwKy ist offline   Mit Zitat antworten
Alt 03-06-2005, 16:48   #9 (permalink)
oEF(etischist)
 
Registriert seit: Dec 2003
Ort: muc
Beiträge: 664
DO wird mindestens einmal durchlaufen, weil die Prüfung immer am Ende der Schleife ist, WHILE ist, analog FOR, eine Schleife, die am ASnfang immer prüft. Alles klar? wenn nicht auchegal. FOR reicht i.d.R. volkommen aus.

so, oef ist schneller? hmmm, warum, was bremst dich? wieviele durchläufe hast du denn?

solo
soloFlash ist offline   Mit Zitat antworten
Alt 06-06-2005, 09:07   #10 (permalink)
scriptvermurkser
 
Benutzerbild von SwKy
 
Registriert seit: Apr 2003
Beiträge: 269
... ich glaube, beim meißten sind es um die 450 Textfelder (also auch Durchläufe)
oef ist ja nur schneller, wenn es so viele sind, dass for lahmgelegt wird. Wenn es nur 80 oder so sind, ist for schneller.
SwKy ist offline   Mit Zitat antworten
Alt 06-06-2005, 09:53   #11 (permalink)
oEF(etischist)
 
Registriert seit: Dec 2003
Ort: muc
Beiträge: 664
450 durchläufe??? Was machst Du da???

Wenn dein Film mit 30fps läuft, dann benötigst Du aber 450/30=15 Sekunden.
For benötogt länger als 15 Sekunden? Kann ich kaum glauben!
Oder meinst Du, dass Dein Film weiterläuft (wird ja pro Frame nur ein Textfeld und Co erstellt, und for Deinen Film zum stehen bringt, bis die 450 Textfelder und Co fertig sind?

Oder solltest Du an der Konzeption was ändern?!?!

Grüße,
solo
soloFlash ist offline   Mit Zitat antworten
Alt 06-06-2005, 11:12   #12 (permalink)
scriptvermurkser
 
Benutzerbild von SwKy
 
Registriert seit: Apr 2003
Beiträge: 269
wohl ein bisschen viel, was?
Ich wusste aber nicht, wie ichs anders lösen soll. Ich hab für jedes Element (plz, Ort, tel., Nr.) ein Textfeld genommen, obwohl sie in einer Reihe stehen sollen, damit jede plz unter der anderen steht. Also wie eine Tabelle. Und wenn es dann 120 Adressen gibt, gibts 480 Textfelder.

Ich denke, dass der film mit for irgendwann langsamer wird, weil flash meint, dass es in einer Endlosschleife hängt:

"Macr. Flash Player wurde durch ein Script in diesem Film verlangsamt. Wenn das Script weiterhin ausgeführt wird, reagiert der computer möglicherweise nicht mehr. Möchten sie die Ausführung des Scriptes jetzt unterbrechen?"
SwKy ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele