Flashhilfe.de - Flash Community

'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werde [Flash 10]

 


AntwortenRegistrieren Seite1  

noobSupreme#1
Benutzerbild von noobSupreme
Beiträge: 8
Registriert: Mar 2012

19.04.2012, 10:20

hallo ihr flash helfer,

ich habe ein Frage zwecks logischem Aufbau...

Ich schreibe gerade ein kleines Quiz-Spiel, welches sich die Fragen via PHP-Skript nach dem Zufallsprinzip aus einer OracleDatenbank holt.
Nun würde ich gerne die bereits gestellten Fragen in einem Array sammeln
um auszusschließen, dass die gleiche Frage zweimal in einem Spieledurchgang gestellt wird.
Ich weiß jetzt aber nicht genau wie ich da jetzt rangehen soll.

Ich denke mal ich muss die Abfrage mit einer verschachtelten if-else Bediengung auswerten, in etwa so...

ActionScript:
1
2
3
4
5
6
7
8
if (frage aus datenbank geholt) {
      mit arrayinhalt abgleichen
         if(frage schon im array) {
              neue frage aus der datenbank holen
                }else{
                   stelle frage && füge sie arrayinhalt zu
                   }
                }
Rein von der Logik, kann mich das zum Erfolg bringen?
Hat jemand sowas schon ein mal gemacht und vielelicht eine bessere Lösung oder einen Tip was ich beachten sollte?
Wie vergleiche ich in AS3 die neue Frage mit den Fragen im Array?
Schlagwörter: Array, auslesen, Datenbank, random, Zufall
Geändert von noobSupreme am 19.04.12 um 10:21 Uhr
vindel#2
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

19.04.2012, 10:43

Hallo und Willkommen hier im Forum!

Dein Ansatz ist schon nicht so schlecht, jedoch hast du ein Problem:
Wenn die Frage schon gestellt wurde, holst du dir eine neue aus der Datenbank - und was ist wenn diese schon gestellt wurde?
Du musst dich mittels Rekursion an das Programm begeben:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
var usedQuestion:Array = new Array();
function getQuestion() {
  var currQuestion = // aus der Datenbank;
for(var i = 0; i < usedQuestion.length; i++)
    if(usedQuestion[i] == currQuestion)
     currQuestion = getQuestion();
  return currQuestion;
}
var neueFrage = getQuestion();
usedQuestion.push(neueFrage);
trace(neueFrage);

So beim Aufruf der Funktion wird eine neue Frage aus der Datenbank geholt. Dann wird geschaut ob diese schon in dem Array "usedQuestion" enthalten ist und wenn ja, dann wird die Funktion neu aufgerufen. Am Ende wird dann eine neue Frage zurück gegeben. Diese wird dann dem Array "usedQuestion" hinzugefügt und anschließend ausgegeben!
Vielleicht solltest du dir Gedanken machen, die Abfrage doch nicht lieber mittels PHP zu machen - dort kannst du ja alle benutzen Frage in die MySQL-Abfrage mit einarbeiten und so bekommst du dann immer eine richtige!
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
noobSupreme#3
Benutzerbild von noobSupreme
Beiträge: 8
Registriert: Mar 2012

Themenautor/in

19.04.2012, 11:02

Danke für deine Antwort. Das Skript werde ich mal ausprobieren und dann Feedback geben, ob es mich zum erwünschten Erfolg geführt hat :)
noobSupreme#4
Benutzerbild von noobSupreme
Beiträge: 8
Registriert: Mar 2012

Themenautor/in

20.04.2012, 11:23

habs jetzt doch ein bischen anders gelöst....aber du hast mich überhaupt erst auf die idee gebracht
ich les alle fragen in ein array ein.... mische sie... und immer wenn ich eine frage gestellt habe, werfe ich sie aus dem array......

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
//////////////////////////////////////////////////////////////////////////
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("http://www3.XXXX.de/index.php"));// Pfad zur Php Datei
loader.addEventListener(Event.COMPLETE, handleComplete);// Eventhandler zum auffangen der Antwort

/////////////////////////////////////////////////////////////////////////
function handleComplete(event:Event):void {
      var xml:XML=XML(event.target.data);
      var originalArray:Array = new Array();                        //array wird definiert

      for(var i=0; i<xml.id.length(); i++)                        //'i' sollte immer >1 als fragen in der datenbank
    {
          originalArray[i]=new Array(7);                            //array ist mehrdimensional und hat pro index
                                                                //7 'unterindexe' die jeweils einen wert haben
        originalArray[i]["frage"]=xml.child(i).frage;
          originalArray[i]["antwort"]=xml.child(i).antwort;
          originalArray[i]["antwort_bem"]=xml.child(i).antwort_bem;
          originalArray[i]["falsch2"]=xml.child(i).falsch2;
          originalArray[i]["falsch2_bem"]=xml.child(i).falsch2_bem;
          originalArray[i]["falsch3"]=xml.child(i).falsch3;
          originalArray[i]["falsch3_bem"]=xml.child(i).falsch3_bem;
      };
      var shuffledArray:Array=originalArray.sort(shuffle);        //shuffle definiert

      function shuffle(originalArray,shuffledArray):int {
          var sortNum:int=shuffledArray.push(originalArray.splice(Math.floor(Math.random()*originalArray.length),2));
          return sortNum;
      }
      //trace(shuffledArray[0]["frage"]);
    //trace(shuffledArray[1]["frage"]);

      //a_txt.text=(shuffledArray[0]["frage"]);

      if (originalArray.length==shuffledArray.length)                //der erste index aus dem shuffledArray wird immmer weggenommen sobald er gestellt worden ist
    {
          shuffledArray.splice(0,1);
      };
      //trace(shuffledArray[0]["frage"]);
    //trace(shuffledArray[1]["frage"]);

      //b_txt.text=(shuffledArray[0]["frage"]);


mir fällt nur keine bessere bediengung für die letzte if schleife ein......
noobSupreme#5
Benutzerbild von noobSupreme
Beiträge: 8
Registriert: Mar 2012

Themenautor/in

08.05.2012, 16:01

Hallo leute,

so heute habe ich endlich mal zeit gefunden hier dran weiter zu arbeiten...bzw diesen code hier bei einem anderen aufgabenrealsierung leicht modifiziert mitzubenutzen

nun funktioniert hier das alles auch ganz gut (auch wenn ichs mir hier und da wohl ein bischen komplizierter als nötig mache)

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
   
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("http://xxxx"));// Pfad zur Php Datei
loader.addEventListener(Event.COMPLETE, handleComplete);// Eventhandler zum auffangen der Antwort
   /////////////////////////////////////////////////////////////////////////
function handleComplete(event:Event):void {
 
     var xml:XML=XML(event.target.data);
     var originalArray:Array = new Array();                  //array wird definiert

     
        for(var i=0; i<xml.id.length(); i++)                  //'i' sollte immer >1 als fragen in der datenbank
      {
           originalArray[i]=new Array(7);                      //array ist mehrdimensional und hat pro index
                                                   //7 'unterindexe' die jeweils einen wert haben
         originalArray[i]["frage"]=xml.child(i).frage;
           originalArray[i]["antwort"]=xml.child(i).antwort;
           originalArray[i]["antwort_bem"]=xml.child(i).antwort_bem;
           originalArray[i]["falsch1"]=xml.child(i).falsch1;
           originalArray[i]["falsch1_bem"]=xml.child(i).falsch1_bem;
           originalArray[i]["falsch2"]=xml.child(i).falsch2;
           originalArray[i]["falsch2_bem"]=xml.child(i).falsch2_bem;
        }
        var shuffledArray:Array=originalArray.sort(shuffle);      //shuffle definiert
   
        function shuffle(originalArray,shuffledArray):int
        {
           var sortNum:int=shuffledArray.push(originalArray.splice(Math.floor(Math.random()*originalArray.length),2));
           return sortNum;
        }
 
     function FrageWeg()                              //gestellte frage rauswerfen, neue stellen
   {
        if (originalArray.length==shuffledArray.length)      //der erste index wird immmer weggenommen sobald er gestellt worden ist
      {                                       
           shuffledArray.splice(0,1);
           CaseVerteiler();
        }
     }
     /*_____________________ZufallsArray In Container_______________________*/
     /////////////////////////////////////////////////////////////////////////
   CaseVerteiler(); //funktionsaufruf antworten_sortierer
   /////////////////////////////////////////////////////////////////////////
   function CaseVerteiler(event)
     {
     Frage_Container.Frage_txt.text=(shuffledArray[0]["frage"]); //frage immer im gleichen MC
      
        //Bedienungen
      var num=Math.round(Math.random()*5);
        switch (num)
        {
        default:
        Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["antwort"]);
        Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch1"]);
        Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch2"]);
        trace("Fall_default");   
        Antwort3_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);   //die eventlistener für den mausclick werden definiert
      Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);   //die eventlistener für den mausclick werden definiert
      Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);   //die eventlistener für den mausclick werden definiert
      break;   
        
        case 1:
        Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["antwort"]);
        Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch1"]);
        Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch2"]);
        trace("Fall_1");
        Antwort1_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
        Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
        Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
        break;
           
        case 2:
        Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["antwort"]);
        Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch1"]);
        Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch2"]);
        trace("Fall_2");
        Antwort1_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
        Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
        Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
        break;
           
        case 3:
        Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["antwort"]);
        Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch1"]);
        Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch2"]);
        trace("Fall_3");
        Antwort2_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
        Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
        Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
        break;
           
        case 4:
        Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["antwort"]);
        Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch1"]);
        Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch2"]);
        trace("Fall_4");
        Antwort2_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
        Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
        Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
        break;
           
        case 5:      
        Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["antwort"]);
        Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch1"]);
        Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch2"]);
        trace("Fall_5");   
        Antwort3_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
        Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
        Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
        break;
        }      
     /////////////////////////////////////////////////////////////////////////

     function RichtigeAntwort(event:MouseEvent):void
     {   
     Aufklaerer_Container.visible=true;
     Aufklaerer_Container.Aufklaerer_txt.text=("Richtig! "+shuffledArray[0]["antwort_bem"]);
     PunkteZaehler_MC.PunkteZaehler_txt.text=(Punkte++ +" Punkte");  //Punktezähler +1
   }
     
     function FalscheAntwort1(event:MouseEvent):void
     {
     Aufklaerer_Container.visible=true;
     Aufklaerer_Container.Aufklaerer_txt.text=("Falsch! "+shuffledArray[0]["falsch1_bem"]);   
     }
     
     function FalscheAntwort2(event:MouseEvent):void
     {
     Aufklaerer_Container.visible=true;
     Aufklaerer_Container.Aufklaerer_txt.text=("Falsch! "+shuffledArray[0]["falsch2_bem"]);
     }
           
     }
     /////////////////////////////////////////////////////////////////////////
   /*_________________________ZufallsArray Gelöst_________________________*/
     /////////////////////////////////////////////////////////////////////////
   Aufklaerer_Container.addEventListener(MouseEvent.CLICK, KlickIrgendwo);    //versteckt den AufklärerContainer
   /////////////////////////////////////////////////////////////////////////
   function KlickIrgendwo(event:MouseEvent):void
     {
     Aufklaerer_Container.visible=false;
     FrageWeg();
     }   
}//von 'handleComplete' abschließende Klammer



nur wenn ich mir die fragen stellen lasse, bleibt er immer bei der gleichen fragen bzw bei der gleichen frage-id hängen und wirft dann folgende fehlermeldung aus

TypeError: Error #1010: Ein Begriff ist nicht definiert und hat keine Eigenschaften.
   at MethodInfo-9()
   at MethodInfo-5()
   at MethodInfo-10()


erst bei frage nummer 7, als ich die dann aus der datenbank geschmissen habe, hängt er nun bei der frage nummer 8 (also wieder bei der 7ten frage)

kann mir jemand ein tip geben, wie ich den fehler deuten und eingrenzen kann?
bin immer noch anfänger

hab dies schon statt so
ActionScript:
1
2
      for(var i=0; i<xml.id.length(); i++)                  //'i' sollte immer >1 als fragen in der datenbank
      
so probiert
ActionScript:
1
2
      for(var i=0; i<15; i++)                  //'i' sollte immer >1 als fragen in der datenbank
      
sind momentan nämlich 15 fragen in der datenbank

und die 7 hier
ActionScript:
1originalArray[i]=new Array(7);
auch schon durch zig sachen ersetzt ....(sollte eiglt sowieso keine rolle spielen udn tuts auch nicht)

nun weiß ich echt nicht mehr weiter :(
Geändert von noobSupreme am 08.05.12 um 16:01 Uhr
vindel#6
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

09.05.2012, 18:33

Schau doch bitte mal im Debugger nach - der zeigt dir dann zum Fehler auch die Zeilennummer. So kann man das Problem schneller finden!
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
noobSupreme#7
Benutzerbild von noobSupreme
Beiträge: 8
Registriert: Mar 2012

Themenautor/in

21.05.2012, 09:38

gutes morgen liebes forum....

endlich mal wieder zeit ein bischen hier weiter zu arbeiten, leider häng ich schon wieder an einer stelle

hier mal der code aufs wesentliche gekürzt


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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
var originalArray:Array = new Array();                        //array wird definiert   
var shuffledArray:Array=originalArray.sort(shuffle);        //shuffle definiert

...................

var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("http://www.xxxx.xx"));// Pfad zur Php Datei
loader.addEventListener(Event.COMPLETE, handleComplete);// Eventhandler zum auffangen der Antwort
/////////////////////////////////////////////////////////////////////////
function shuffle(arr:Array):void
{
      var len:int = arr.length;
      for(var i:int = len; i--; ){
          var j:int = Math.random() * len;
          var h:* = arr[j];
          arr[j]= arr[i];
          arr[i]= h;
      }
}
function handleComplete(event:Event):void
{
  trace("handleComplete1");   
  var xml:XML=XML(event.target.data);
 
      for(var i=0; i<xml.id.length(); i++)                        //'i' sollte immer >1 als fragen in der datenbank
    {
          originalArray[i]=new Array(7);                            //array ist mehrdimensional und hat pro index
                                                                //7 'unterindexe' die jeweils einen wert haben
        originalArray[i]["frage"]=xml.child(i).frage;
          originalArray[i]["antwort"]=xml.child(i).antwort;
          originalArray[i]["antwort_bem"]=xml.child(i).antwort_bem;
          originalArray[i]["falsch1"]=xml.child(i).falsch1;
          originalArray[i]["falsch1_bem"]=xml.child(i).falsch1_bem;
          originalArray[i]["falsch2"]=xml.child(i).falsch2;
          originalArray[i]["falsch2_bem"]=xml.child(i).falsch2_bem;
      }
      trace("handleComplete3");
      trace("1: "+shuffledArray.length);   
      //shuffle(originalArray,shuffledArray);
    for (var a:Object in  originalArray){
          trace(a + originalArray[a]["frage"] + " : " +  originalArray[a]["antwort"]+ originalArray[a]["falsch1"]+  originalArray[a]["falsch2"]);
      }
     
      shuffle(originalArray);
      shuffledArray = originalArray.concat();
      for (var b:Object in  shuffledArray){
          trace(b + shuffledArray[b]["frage"] + " : " +  shuffledArray[b]["antwort"]+ shuffledArray[b]["falsch1"]+  shuffledArray[b]["falsch2"]);
      }
}
/////////////////////////////////////////////////////////////////////////
/*_____________________ZufallsArray In Container_______________________*/
/////////////////////////////////////////////////////////////////////////
function CaseVerteiler()
{
      trace("CaseVerteiler1");       
      trace("2: "+shuffledArray.length);   
          if(shuffledArray.length<1)
          {
              trace("jetzt ist rum_Array leer");
              EndeAntwortFrageFensterAusblenden();
              myTimer.start();
          }   
          else if(Punkte==11)
          {
              trace("jetzt ist rum_ 10 Punkte");
              EndeAntwortFrageFensterAusblenden();
              myTimer.start();
          }
          else
          {
              trace("CaseVerteiler2");       
              var num=Math.round(Math.random()*5);        //Bedienungen
            trace("CaseVerteiler3");       
              Frage_Container.Frage_txt.text=(shuffledArray[0]["frage"]); //frage immer im gleichen MC
            trace("CaseVerteiler4");       
              trace("3: "+shuffledArray.length);       
                  switch (num)
                  {            
                                      
                  case 1:
                      Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["antwort"]);
                      Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch1"]);
                      Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch2"]);
                      trace("Fall_1");
                      trace("Richtig: "+shuffledArray[0]["antwort"]);               
                      trace("Falsch1: "+shuffledArray[0]["falsch1"]);
                      trace("Falsch2: "+shuffledArray[0]["falsch2"]);            
                      Antwort1_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
                      Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
                      Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
                      break;
                     
                  case 2:
                      Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["antwort"]);
                      Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch1"]);
                      Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch2"]);
                      trace("Fall_2");
                      trace("Richtig: "+shuffledArray[0]["antwort"]);                   
                      trace("Falsch1: "+shuffledArray[0]["falsch1"]);
                      trace("Falsch2: "+shuffledArray[0]["falsch2"]);            
                      Antwort2_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
                      Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
                      Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
                      break;
                     
                  case 3:
                      Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["antwort"]);
                      Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch1"]);
                      Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch2"]);
                      trace("Fall_3");
                      trace("Richtig: "+shuffledArray[0]["antwort"]);               
                      trace("Falsch1: "+shuffledArray[0]["falsch1"]);
                      trace("Falsch2: "+shuffledArray[0]["falsch2"]);                        
                      Antwort1_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
                      Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
                      Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
                      break;
 
                  case 4:
                      Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["antwort"]);
                      Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch1"]);
                      Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch2"]);
                      trace("Fall_4");
                      trace("Richtig: "+shuffledArray[0]["antwort"]);               
                      trace("Falsch1: "+shuffledArray[0]["falsch1"]);
                      trace("Falsch2: "+shuffledArray[0]["falsch2"]);                   
                      Antwort3_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
                      Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
                      Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
                      break;
                  case 5:       
                      Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["antwort"]);
                      Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch1"]);
                      Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch2"]);
                      trace("Fall_5");
                      trace("Richtig: "+shuffledArray[0]["antwort"]);                   
                      trace("Falsch1: "+shuffledArray[0]["falsch1"]);
                      trace("Falsch2: "+shuffledArray[0]["falsch2"]);               
                      Antwort2_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
                      Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
                      Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
                      break;   
                     
                  default:
                      Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["antwort"]);
                      Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch1"]);
                      Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch2"]);
                      trace("Fall_default");
                      trace("Richtig: "+shuffledArray[0]["antwort"]);               
                      trace("Falsch1: "+shuffledArray[0]["falsch1"]);
                      trace("Falsch2: "+shuffledArray[0]["falsch2"]);                   
                       Antwort3_Container.addEventListener(MouseEvent.CLICK,  RichtigeAntwort);    //die eventlistener für den mausclick werden  definiert
                     Antwort1_Container.addEventListener(MouseEvent.CLICK,  FalscheAntwort1);    //die eventlistener für den mausclick werden  definiert
                     Antwort2_Container.addEventListener(MouseEvent.CLICK,  FalscheAntwort2);    //die eventlistener für den mausclick werden  definiert
                    break;   
              }       
          }
      }   

.......

function RichtigeAntwort(event:MouseEvent):void
{
      AntwortFensterAusblenden();
      Aufklaerer_Container.Aufklaerer_txt.text=("Richtig! "+shuffledArray[0]["antwort_bem"]);
      PunkteZaehler_MC.PunkteZaehler_txt.text=(Punkte++ +" Punkte");  //Punktezähler +1
    trace(Punkte+1 +" Punkte");
      //(event.target).removeEventListener(MouseEvent.CLICK, FalscheAntwort1);   
    //(event.target).removeEventListener(MouseEvent.CLICK, FalscheAntwort2);
    Aufklaerer_Container.addEventListener(MouseEvent.CLICK, KlickIrgendwo);
}
   
function FalscheAntwort1(event:MouseEvent):void
{
      AntwortFensterAusblenden();
      Aufklaerer_Container.Aufklaerer_txt.text=("Leider nicht ganz richtig! "+shuffledArray[0]["falsch1_bem"]);   
      //(event.target).removeEventListener(MouseEvent.CLICK, RichtigeAntwort);   
    //(event.target).removeEventListener(MouseEvent.CLICK, FalscheAntwort2);
    Aufklaerer_Container.addEventListener(MouseEvent.CLICK, KlickIrgendwo);
}
function FalscheAntwort2(event:MouseEvent):void
{
      AntwortFensterAusblenden();
      Aufklaerer_Container.Aufklaerer_txt.text=("Stimmt leider nicht! "+shuffledArray[0]["falsch2_bem"]);   
      //(event.target).removeEventListener(MouseEvent.CLICK, FalscheAntwort1);
    //(event.target).removeEventListener(MouseEvent.CLICK, RichtigeAntwort);
    Aufklaerer_Container.addEventListener(MouseEvent.CLICK, KlickIrgendwo);
}

........

//Aufklaerer_Container.addEventListener(MouseEvent.CLICK, KlickIrgendwo);     //versteckt den AufklärerContainer

function KlickIrgendwo(event:MouseEvent):void
{
      .....
      (shuffledArray.splice(0,1));
      trace("5: "+shuffledArray.length);   
      CaseVerteiler();
}   
ich hab mein array schon mit verschiedenen methoden gemischt, (push&pop, concat, selbst definierte shuffle funktion, etc) doch nach ca 6-8 fragen, kommt er bei ein, zwei fragen mit der antwort durcheinander, unabhängig davon, welchen fall er zur fragen-verteilung (in die dynamischen textfelder) angewendet hat.
dies passiert allerdings wirklich nur ein, zwei mal, dann befüllt er wieder die richtigen textfelder.

da ich mittlw bediengungen aufgestellt habe, was er denn nun bei einem leeren array machen soll, kann es nicht mehr daran liegen. zumal ich die array länge 'mittrace' und es immer noch genung fragen im array hätte (und er ja auch nach den ein, zwei falsch zu geordneten wieder richtig 'weiterverteilt').

auch der debugger zeigt mir kein gesondertes verhalten auf, zig andere dinge zb das entfernen der event listener nach jedem aufruf, so dass sie stehts neu gesetzt werden, helfen auch nicht weiter...

was noch sehr komisch ist, lasse ich mir die antworten tracen
ActionScript:
1
2
3
trace("Richtig: "+shuffledArray[0]["antwort"]);
trace("Falsch1: "+shuffledArray[0]["falsch1"]);
trace("Falsch2: "+shuffledArray[0]["falsch2"]);
ordnet er sie hier immer richtig, d.h. lediglich beim befüllen macht er probleme...

ich bin mit meinen anfänger-skillz wirklich am ende, vllt könnt ihr mir helfen!



EDIT: nach ein bischen spielerei habe ich gemerkt, das wenn er nur den default case hat, er die textfelder immer richtig befüllt... ??!!
Geändert von noobSupreme am 21.05.12 um 10:22 Uhr
vindel#8
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

31.05.2012, 11:37

Was mir direkt auffällt ist, dass du mit deinem Shuffle-Array quatsch machst:
ActionScript:
1
2
3
4
5
6
7
      trace("1: "+shuffledArray.length);   
    for (var a:Object in  originalArray){
            trace(a + originalArray[a]["frage"] + " : " +  originalArray[a]["antwort"]+ originalArray[a]["falsch1"]+  originalArray[a]["falsch2"]);
        }
      
      shuffle(originalArray);
      shuffledArray = originalArray.concat();

1. Zeile: Dein Array dürfte noch nicht befüllt sein, also auch keine Länge haben.
6. Zeile: Die Methode ist nutzlos - der wird ein Array übergeben der dann gemischt wird, aber nicht wieder zurück gegeben!
7. erst hier wird dein "shuffledArray" erstellt.

Was du auch erst mal machen solltest:
ActionScript:
1
2
3
Antwort3_Container.addEventListener(MouseEvent.CLICK,  RichtigeAntwort);   
Antwort1_Container.addEventListener(MouseEvent.CLICK,  FalscheAntwort1);   
Antwort2_Container.addEventListener(MouseEvent.CLICK,  FalscheAntwort2);   

wird für jede Frage auf die gleichen MC'S erstellt, also hast du am ende auf deinem Knopf 5 oder mehr Event-listeners. Einfach mit:
ActionScript:
1Antwort1_Container.removeEventListener(MouseEvent.CLICK,  FalscheAntwort1);

alte entfernen, oder aber die nur ein mal definieren!
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
noobSupreme#9
Benutzerbild von noobSupreme
Beiträge: 8
Registriert: Mar 2012

Themenautor/in

31.05.2012, 17:24

ich hätte ja nicht gedacht, dass sich hier noch jemand meldet.... habs mittlw hinbekommen

es lag wirklich an den EventListenern, die ich nicht komplett nach funktionsaufruf entfernt habe...

array methode schau ich mir nochmal an, danke für den hinweis

AntwortenRegistrieren Seite1  

Schnellantwort

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

 
Ähnliche Beiträge zum Thema
Javascript new line [Flash CS5] 23.11.2020 - user01234
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2021 Sebastian Wichmann - Flashhilfe.de