Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-02-2004, 17:04   #1 (permalink)
Neuer User
 
Registriert seit: Oct 2002
Ort: Duisburg
Beiträge: 33
Brett vor'm Kopp ... oder "von Schleifen und Frames..."

Servus,

ich habe ein prinzipielles Problem bzw. Brett vor'm Kopp und möchte gerne in die richtige Denk-Richtung geschubst werden:

In einer Funktion mit zwei ineinander geschachtelten Schleifen veranstalte ich allerlei rechenintensiven Kram, so dass es so aussieht, als wäre Flash eingeschlafen bzw. die "Flash player runs slowly" Meldung kommt.
Nun möchte ich die Schleifen aufbrechen und über Frames laufen lassen, damit man sieht, dass sich noch was tut bzw. die Fehlermeldung nicht mehr kommt.

Nur wie mache ich das am geschicktesten? Ich möchte den Code gerne zentral an einer Stelle halten und nicht einzelne Teile aus der Funktion und den Schleifen herausschnippeln, über Frames verteilen, um dann wie in Basic mit gotoAndPlay arbeiten zu müssen. Zudem "verlasse" ich meine Funktion mit einer goto-Anweisung und kann schließlich, nachdem ActionScript in dem Frame ausgeführt wurde, wieder an die alte Stelle in der Funktion zurück springen und sie weiter ausführen lassen.

Habe ich da irgendwo einen Denkfehler? Irgendein Tipp ... oder Verweis im Forum? (Trotz Suche habe ich leider nix gefunden)


Tibby
Tibby ist offline   Mit Zitat antworten
Alt 25-02-2004, 17:11   #2 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
also Flash player runs slowly" meldung kommen nur wenn die schleife nie erfüllt werden kann zb

for (i=0;i>-5;i++)
oder bei endlos whileschleifen..

daher zeig ma deine code
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 25-02-2004, 17:54   #3 (permalink)
Neuer User
 
Registriert seit: Oct 2002
Ort: Duisburg
Beiträge: 33
Zitat:
also Flash player runs slowly" meldung kommen nur wenn die schleife nie erfüllt werden kann
... oder aber, wenn Flash nicht in einer Endlosschleife steckt aber zu sehr mit Numbercrunchen beschäftigt ist.

Siehe auch Technote bei Macromedia


Hier ist mal der relevante Code:
ActionScript:
  1. zeichneBrett = function () {
  2.     rowindex = 1;
  3.     _global.item = 1;
  4.     while (row <= reihen) {
  5.         drawrow(rowindex);
  6.         rowindex++;
  7.     }
  8. };
  9. drawrow = function (thisrow) {
  10.     this.row = thisrow;
  11.     this.col = 1;
  12.     while (this.col <= spalten) {
  13.         drawfield(this.row, this.col);
  14.         this.col++;
  15.     }
  16. };
  17. drawfield = function (thisrow, thiscol) {
  18.     this.row = thisrow;
  19.     this.col = thiscol;
  20.     _root.attachMovie("field_mc", "field_" + this.row + "_" + this.col, item);
  21.     _root["field_" + this.row + "_" + this.col]._x = _root["field_" + this.row + "_" + this.col]._width * this.col;
  22.     _root["field_" + this.row + "_" + this.col]._y = _root["field_" + this.row + "_" + this.col]._height * this.row;
  23.     item++;
  24. };
  25. //
  26. _global.reihen = 20;
  27. _global.spalten = 90;
  28. zeichneBrett();
  29. stop();

Wenn das Spielfeld vergrößert wird, kommt es irgendwann zu besagter Fehlermeldung. Aber darum gehts mir schon fast weniger, als daß ich Flash beim zeichnen des Spielbrettes zugucken möchte, zB. reihenweise.

In der angehängten Datei ist der Einfachheit halber nochmal das Beispiel-fla.

Tibby
Angehängte Dateien
Dateityp: zip spielbrett.zip (2,4 KB, 9x aufgerufen)
Tibby ist offline   Mit Zitat antworten
Alt 25-02-2004, 21:06   #4 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
naja, mit 20*90 benötigt meine mühle 6.521 sekunden...es ist ja doch auch ein wenig zu tun bei derart viel spielfeldern (brauch eh kein mensch )
wenn du dabei zusehen willst, dann benötigst du mit sicherheit ein intervall.

grz
warrantmaster ist offline   Mit Zitat antworten
Alt 26-02-2004, 08:49   #5 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
sehe ich das richtig, dass das einfach ein brett gibt, also ein großes rechteck aus kleinen quadraten?
]gebe zu, dass ich zu faul bin, dass in ne fla zu stopfen...[

blöde frage...

warum machst du das dann nicht mit einer veschqachtelten for-schleife oder verschachteltem while...?


sieht mir doch ziemlich 'wild' aus... außerdem solltest du mal werte zwischen speichern in ner lokalen var und sie nicht ständig berechnen lassen - denn wen du schreibst: this.row [z.bsp], dann muss flash stetig über die pfadwege die variable überprüfen.
ein einfaches: var r = this.row; beschleunigt schon imens...


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 26-02-2004, 09:49   #6 (permalink)
nky
Bontempi Punk
 
Benutzerbild von nky
 
Registriert seit: Dec 2001
Ort: Dtld/Pfalz
Beiträge: 4.185
performancesparender - wäre auch

eine große Fläche ..und ein paar lineto`s zum unterteilen...
kann aber sein das dies hier nicht möglich ist...weiß ja nicht für was Du das "Brett" brauchst..

Gruss nky
nky ist offline   Mit Zitat antworten
Alt 26-02-2004, 11:27   #7 (permalink)
Neuer User
 
Registriert seit: Oct 2002
Ort: Duisburg
Beiträge: 33
Zitat:
warum machst du das dann nicht mit einer veschqachtelten for-schleife oder verschachteltem while...?
Darum geht's mir ja gerade: Egal ob durch verschachtelte Funktions-Aufrufe oder verschachtelte while-Schleifen:
Wie kann ich "zwischendurch", aus Funktionen und/oder Schleifen heraus, den Stand von Berechnungen oder Zeichen-Operationen auf die Stage updaten ohne Code allzusehr auseinanderzupflücken und auf Frames verteilen zu müssen?

Das "Brett" ist nur als Übungs-Beispiel gedacht um das Problem etwas anschaulicher zu machen. Ich dachte eigentlich es wäre klar, daß dieses Brett mit den vielen Kästchen wenig Sinn macht ... außer halt zu zeigen wo mein Verständnis-Problem liegt bzw. wie man so ein Problem prinzipiell angeht.

Tibby
Tibby ist offline   Mit Zitat antworten
Alt 26-02-2004, 11:42   #8 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
axo...nochmal kurz gelesen, was du wolltets...

nun..in dem fall wäre es vielleicht am geschicktesten, wenn du die funktion in eine onEnterFrame-fkt packst oder in einem interval aufrufst[den du ja selbst bestimmen kannst], like:

ActionScript:
  1. //enterframe-variante
  2.  
  3. this.createEmptyMovieClip('machMal',1000);
  4. var mc= this['machMal'];
  5. mc.zahl=0;
  6. mc.tuWasWert=10 //  jedes 10.bild !!!
  7. mc.onEnterFrame= function(){
  8.       this.zahl++;
  9.       if(this.zahl==this.tuWasWert){
  10.  
  11.              // hier deinen code
  12.  
  13.             this.zahl=0;
  14.      }
  15. }

berechnet nur jedes 10.bild etwas...


oder aber via interval

ActionScript:
  1. function imInterval(){
  2.              this=arguments[0];
  3.              
  4.              this.m++;
  5.              trace(this.m +' vergangene zeit: '+getTimer());
  6.  
  7.              // wenn irgendwas erreicht ist lösche interval wieder
  8.              // clearInterval(this.intval);
  9. }
  10.  
  11. this.intval=setInterval(imInterval,1000,this);

2.übergabewert ist die zeitdifferenz/der interval in dem die funktion aufgerufen werden soll in millisekunden [ms]


hope this helps...


greetz

kelor
kelor 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 22:06 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele