Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-09-2005, 15:22   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Ort: Mauerbach bei Wien
Beiträge: 14
Flashquiz: Schleifenproblem

Gleich mal vorneweg: Ich weiß, man kann das, was ich hier mache, wesentlich eleganter lösen (zB mit XML), aber so weit bin ich leider noch nicht, weshalb ich mal verhältnismäßig simpel beginne.

Es geht darum:

Ich bin gerade dabei ein Multiple-Choice-Quiz (wie zB bei der "Millionenshow" oder "Wer wird Millionär") zu programmieren. Ich habe sämtliche Fragen mit den Antworten in Objekten abgespeichert, die nacheinander aufgerufen werden sollen. dazu hab ich ein Array erstellt, in dem jeder eintrag eine referenz auf die objekte hat, mit irgendeiner schleife soll dieses array nun der reihe nach durchgegangen werden. gibt ein user eine richtige antwort ein wird [var richtigeaws] inkrementiert, wenn nicht...dann eben nicht...

Jetzt zu meinem Problem:

Aufgrund der Struktur des Codes (siehe unten) mutiert die while-Schleife zu einer Endlosschleife, da die Zählervariable nur inkrementiert wird (und somit das Quiz zur nächsten Frage springen sollte), wennder User auf eine Antwort geklickt hat.

Meine Frage:

Gibt es in ActionScript irgendeinen Befehl, mit dem man einer Schleife sagen kann, dass sie sich nur ausführen soll wenn die Zählervariable geändert wird? (Auch über andere Tipps würde ich mich freuen...es soll nur mal funktionieren... ^^)

Hier die derzeitige Struktur. Die Klasse mit sämtlichen Fragen und Antworten sowie alle Variabllen die hier ohne erzeugt geworden zu sein dastehen wurde bereits vorher erzeugt.

ActionScript:
  1. this.createTextField("frage_txt", 3, fragex, fragey, 700, 30);
  2. this.createTextField("aw1_txt", 4, aw1x, aw1y, 200, 30);
  3. this.createTextField("aw2_txt", 5, aw2x, aw2y, 200, 30);
  4. this.createTextField("aw3_txt", 6, aw3x, aw3y, 200, 30);
  5. this.createTextField("aw4_txt", 7, aw4x, aw4y, 200, 30);
  6.  
  7. var fragen = [f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21];
  8. _global.i = 0;
  9. while(_global.i<=20) {
  10.     _global.nextf = fragen[i];
  11.     frage_txt.text = nextf.ftxt;
  12.     aw1_txt.text = nextf.aw1;
  13.     aw2_txt.text = nextf.aw2;
  14.     aw3_txt.text = nextf.aw3;
  15.     aw4_txt.text = nextf.aw4;
  16.  
  17. _global.bgcolor = 0xffffff;
  18. _global.bgcoloraw1 = 0xffffff;
  19. _global.bgcoloraw2 = 0xffffff;
  20. _global.bgcoloraw3 = 0xffffff;
  21. _global.bgcoloraw4 = 0xffffff;
  22.  
  23. this.onEnterFrame = function() {
  24.    
  25.  
  26. fragen_anzeige.text = "Fragennummer: " + frageid + "/" + fragengesamt;
  27. richtig_txt.text = "Richtige Antworten: " + richtig + "/" + fragengesamt;
  28.  
  29.     _root.createEmptyMovieClip( "frage_rahmen", 8 );
  30.     with (_root.frage_rahmen){
  31.         beginFill (bgcolor, 10);
  32.         lineStyle (0, 0x000000, 100);
  33.         moveTo (fragex-20, fragey-40);
  34.         lineTo (fragex+550, fragey-40);
  35.         lineTo (fragex+550, fragey+50);
  36.         lineTo (fragex-20, fragey+50);
  37.         lineTo (fragex-20, fragey-40);
  38.         endFill();
  39.     }
  40.     _root.createEmptyMovieClip( "aw1_rahmen", 9 );
  41.     with (_root.aw1_rahmen){
  42.         beginFill (_global.bgcoloraw1, 10);
  43.         lineStyle (0, 0x000000, 100);
  44.         moveTo (aw1x-20, aw1y-10);
  45.         lineTo (aw1x+200, aw1y-10);
  46.         lineTo (aw1x+200, aw1y+20);
  47.         lineTo (aw1x-20, aw1y+20);
  48.         lineTo (aw1x-20, aw1y-10);
  49.         endFill();
  50.         aw1_rahmen.onPress = function() {
  51.             _global.bgcoloraw1 = 0xcd2121;
  52.             _global.bgcoloraw2 = 0xffffff;
  53.             _global.bgcoloraw3 = 0xffffff;
  54.             _global.bgcoloraw4 = 0xffffff;
  55.             _global.awuser = "aw1";
  56.             trace(awuser);
  57.             trace(_global.nextf.awr);
  58.                 if(_global.awuser == _global.nextf.awr && _global.awuser != "noaw") {
  59.                     _global.richtig += 1;
  60.                     trace("Richtig: " + _global.richtig);
  61.                     _global.bgcoloraw1 = 0x00ff00;
  62.                 }
  63.                 else {
  64.                     trace("Falsch");
  65.                     _global.bgcoloraw1 = 0xcd2121;
  66.                 }
  67.             }
  68.         } // Ende des ersten Rahmens
  69.    
  70. // Das ganze noch 3x für die restlichen Antworten. Wurde für den Beitrag gekürzt.
  71.  
  72. } // Ende der Schleife
  73.  

PS: Vielen dank schon jetzt für eure Antworten!

Geändert von GK15 (27-09-2005 um 16:41 Uhr)
GK15 ist offline   Mit Zitat antworten
Alt 27-09-2005, 22:16   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Das würde ich nicht über eine while-Schleife sondern über eine rekursive Funktion lösen, z.B.:
ActionScript:
  1. :
  2. :
  3. var fragenlänge = fragen.length;//wieviele Fragen?
  4. var fragenzähler = 0;
  5. function frage(nr){
  6. _global.nextf = ...
  7. aw1_rahmen.onPress = function() {
  8. :
  9. _level0.fragenzähler ++;//Zähler erhöhen
  10. if(_level0.fragenzähler < _level0.fragenlänge){//sind noch Fragen übrig?
  11. _level0.frage(_level0.fragenzähler);//ja, dann die nächste Frage aufrufen
  12. }
  13. else{//alle Fragen durch, evtl. wieder Frage 1 oder eine Auswertung/Feedback etc
  14. _level0.fragenzähler = 0;
  15. }
  16. }
  17. }
  18. frage(fragenzähler);//mit der ersten Frage beginnen
  19.  
  Mit Zitat antworten
Alt 28-09-2005, 12:55   #3 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Ort: Mauerbach bei Wien
Beiträge: 14
Danke für den Tipp, werds gleich ausprobieren!
GK15 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 12:55 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele