Richtig/Falsch Abfrage für ein Quiz auslesen

intercorni

Erfahrenes Mitglied
Hallo,

ich baue gerade in Flash ein Quiz zusammen, wobei die Quizfragen aus einem XML-File geladen werden. Zu jeder Frage (insgesamt 10) gibt es drei Antworten und im XML-File ist zu jeder Antwort vermerkt, welche richtig und welche falsch ist.
Nun weiß ich jedoch nicht, wie ich die "Mechanik" dazu bauen müsste, um ein Richtig oder Falsch anzeigen zu können.

Mein XML-File zwigt hier nur mal als Beispiel eine Frage mit 3 Antworten:

PHP:
<?xml version='1.0' encoding='utf-8' ?>
<thema01 name="Thema 1">
	<frage name="Frage 1" beschreibung="Wie lautet die Frage 1 ?">
		<antwort name="Antwort 1" beschreibung="Richtig" />
		<antwort name="Antwort 2" beschreibung="Falsch" />
		<antwort name="Antwort 3" beschreibung="Falsch" />
	</frage>
</thema01>

Die Daten aus dem XML-File lade ich so in Flash:

PHP:
stop();

var XMLdaten = new XML();
XMLdaten.ignoreWhite=true; 
XMLdaten.load("daten/xmltest.xml");
XMLdaten.onLoad = function(success) {

  if (success) { 
  	pictureloader(0);
  	anzahlFragen = XMLdaten.firstChild.childNodes.length;
	anzahlAntworten = []; //neues Array
	for (var i=0; i<anzahlFragen; i++) {//alle Fragen durchgehen
	//länge der Antworten Ojekte der jeweiligen Frage auslesen und ins array schreiben
	anzahlAntworten[i] = XMLdaten.firstChild.childNodes[i].childNodes.length;
}
namen = [];
beschreibungen = [];
fragen = [];
themen = [];
for (var i=0; i<anzahlFragen; i++) {//für jede Frage
namen[i] =[];
beschreibungen[i] = [];
fragen[i] = [];
themen[i] = [];
for (var j=0; j<anzahlAntworten[i]; j++) {//für alle Antworten der jeweiligen Frage
//auslesen
namen[i][j] = XMLdaten.firstChild.childNodes[i].childNodes[j].attributes.name;
beschreibungen[i][j] = XMLdaten.firstChild.childNodes[i].childNodes[j].attributes.beschreibung;
fragen[i][j] = XMLdaten.firstChild.childNodes[i].attributes.beschreibung;
themen[i][j] = XMLdaten.firstChild.attributes.name;
}
}

  }

      }

In einem dynamischen Textfeld lasse ich mir die erste Frage anzeigen.
Dazu werden dann jeweils in einem dynamischen Textfeld die drei möglichen Antworten angezeigt.
Diese Antwort-Textfelder habe ich klickbar gemacht, jedoch noch kein Scripting draufgelegt, weil ja hier überprüft werden muss, ob die Frage Richtig oder Falsch ist. So sehen meine Antwort-Buttons aus:

PHP:
//Antwort A
this.createEmptyMovieClip("antwort_a_mc", this.getNextHighestDepth());
antwort_a_mc._x = 80;
antwort_a_mc._y = 500;
antwort_a_mc.createTextField("antwort_a_txt", this.getNextHighestDepth(), 0, 0, 280, 130);
	antwort_a_mc.antwort_a_txt.autoSize = "left";
	antwort_a_mc.antwort_a_txt.embedFonts = true;
	antwort_a_mc.antwort_a_txt.antiAliasType = "normal";
	antwort_a_mc.antwort_a_txt.multiline = true;
	antwort_a_mc.antwort_a_txt.text = "";
	antwort_a_mc.antwort_a_txt.wordWrap = true;
	var style_antwort_a:TextFormat = new TextFormat();
	style_antwort_a.font = "ueberschrift";
	style_antwort_a.size = 20;
	style_antwort_a.color = 0xFFFFFF;
	antwort_a_mc.antwort_a_txt.setTextFormat(style_antwort_a);
	antwort_a_mc.onRelease = function():Void {
		//Hier Richtig-Falsch-Abfrage
		};
//Antwort B
this.createEmptyMovieClip("antwort_b_mc", this.getNextHighestDepth());
antwort_b_mc._x = 80;
antwort_b_mc._y = 540;
antwort_b_mc.createTextField("antwort_b_txt", this.getNextHighestDepth(), 0, 0, 280, 130);
	antwort_b_mc.antwort_b_txt.autoSize = "left";
	antwort_b_mc.antwort_b_txt.embedFonts = true;
	antwort_b_mc.antwort_b_txt.antiAliasType = "normal";
	antwort_b_mc.antwort_b_txt.multiline = true;
	antwort_b_mc.antwort_b_txt.text = "";
	antwort_b_mc.antwort_b_txt.wordWrap = true;
	var style_antwort_b:TextFormat = new TextFormat();
	style_antwort_b.font = "ueberschrift";
	style_antwort_b.size = 20;
	style_antwort_b.color = 0xFFFFFF;
	antwort_b_mc.antwort_b_txt.setTextFormat(style_antwort_b);
	antwort_b_mc.onRelease = function():Void {
		//Hier Richtig-Falsch-Abfrage
		};
//Antwort C
this.createEmptyMovieClip("antwort_c_mc", this.getNextHighestDepth());
antwort_c_mc._x = 80;
antwort_c_mc._y = 580;
antwort_c_mc.createTextField("antwort_c_txt", this.getNextHighestDepth(), 0, 0, 280, 130);
	antwort_c_mc.antwort_c_txt.autoSize = "left";
	antwort_c_mc.antwort_c_txt.embedFonts = true;
	antwort_c_mc.antwort_c_txt.antiAliasType = "normal";
	antwort_c_mc.antwort_c_txt.multiline = true;
	antwort_c_mc.antwort_c_txt.text = "";
	antwort_c_mc.antwort_c_txt.wordWrap = true;
	var style_antwort_c:TextFormat = new TextFormat();
	style_antwort_c.font = "ueberschrift";
	style_antwort_c.size = 20;
	style_antwort_c.color = 0xFFFFFF;
	antwort_c_mc.antwort_c_txt.setTextFormat(style_antwort_c);
	antwort_c_mc.onRelease = function():Void {
		//Hier Richtig-Falsch-Abfrage
		};

Wie geh ich nun am besten vor, um die Parameter Richtig/Falsch auszulesen? Ein Trace nach dem klicken auf eine der drei Antworten mit der Anzeige des Parameters Richtig oder Falsch würde mir schon genügen, um weiterarbeiten zu können.
Ich wäre über jede Hilfe dankbar :-)

Gruss,

Cornel
 
Ein Richtig/Falsch kann ich mir schonmal austracen lassen, wenn ich diese Werte wie folgt auslese:

PHP:
stop();

var XMLdaten = new XML();
XMLdaten.ignoreWhite=true; 
XMLdaten.load("daten/xmltest.xml");
XMLdaten.onLoad = function(success) {

  if (success) { 
  	pictureloader(0);
  	anzahlFragen = XMLdaten.firstChild.childNodes.length;
	anzahlAntworten = []; //neues Array
	for (var i=0; i<anzahlFragen; i++) {//alle Fragen durchgehen
	//länge der Antworten Ojekte der jeweiligen Frage auslesen und ins array schreiben
	anzahlAntworten[i] = XMLdaten.firstChild.childNodes[i].childNodes.length;
}
namen = [];
beschreibungen = [];
fragen = [];
themen = [];
richtig_falsch = [];
for (var i=0; i<anzahlFragen; i++) {//für jede Frage
namen[i] =[];
beschreibungen[i] = [];
fragen[i] = [];
themen[i] = [];
richtig_falsch[i] = [];
for (var j=0; j<anzahlAntworten[i]; j++) {//für alle Antworten der jeweiligen Frage
//auslesen
namen[i][j] = XMLdaten.firstChild.childNodes[i].childNodes[j].attributes.name;
beschreibungen[i][j] = XMLdaten.firstChild.childNodes[i].childNodes[j].attributes.beschreibung;
fragen[i][j] = XMLdaten.firstChild.childNodes[i].attributes.beschreibung;
themen[i][j] = XMLdaten.firstChild.attributes.name;
richtig_falsch[i][j] = XMLdaten.firstChild.childNodes[i].childNodes[j].attributes.beschreibung;
}
}
trace(richtig_falsch[0][1]); //Austracen ob Wert Richtig oder Falsch

  }

      }

Jetzt brauche ich auf jeden der drei Antwort-Button eine Abfrage: wenn Richtig dann mach das, wenn Falsch dann das. Wie stelle ich das an?
 
Auf die schnelle würd ich sagen: Übergib in deiner XML noch einen Wert für richtig oder falsch.
rf = 0 bzw. rf = 1 für wahr oder falsch. Und dann im Button abfragen if(rf==0)...

Im Zweifelsfalle mache Er eine Zip draus und dann guck ich noch ma. :)

TZP
 
Danke für die Antwort.
Im XML File steht ja hinter jeder Antwort ob richtig oder falsche Antwort, das müsste man doch genauso wie 1 und 0 auslesen können, oder?
Ich habe das File mal hier beigefügt. Thema1 und Frage 1 funktionieren, der Rest ist noch nicht beschalten.
 

Anhänge

Yo, kannste auch. Hab es mir gerade gegeben. Du erstellst ja 3 antwort_mcs und da machste noch das hier:

Code:
...
...
antwort_a_mc.antwort_a_txt.setTextFormat(style_antwort_a);
antwort_a_mc.onRelease = function():Void {//Buttondefinition A
if(richtig_falsch[0][0]=="Richtig"){
	trace("Score");
}

Der Rest ergibt sich. :)

TZP
 
So klappt das schonmal, danke für den Tipp. Ich habe auf jeden der drei Antwort-Button folgendes Scripting gelegt:

PHP:
//Antwort A
antwort_a_mc.onRelease = function():Void {//Buttondefinition A
		//trace(richtig_falsch[0][1]); 
		if(richtig_falsch[0][0]=="Richtig"){
		trace("Richtig");
		} else {
    	trace("Falsch");
		}
		};

//Antwort B
	antwort_b_mc.onRelease = function():Void {//Buttondefinition B
		if(richtig_falsch[0][1]=="Richtig"){
		trace("Richtig");
		} else {
    	trace("Falsch");
		}
		};

//Antwort C
	antwort_c_mc.onRelease = function():Void {//Buttondefinition C
		if(richtig_falsch[0][2]=="Richtig"){
		trace("Richtig");
		} else {
    	trace("Falsch");
		}
		};

Hier habe ich den Pfad zum Array direkt im Button festgelegt, z.. im Button A:

PHP:
richtig_falsch[0][0]

Dies müsste nun automatisch passieren, da ich 10 Fragen habe und nicht nur die Eine.
Welche Frage angewählt wurde, habe ich per Variable festgelegt, z.B. für die erste Frage:

PHP:
var button_number:Number = 1;

oder für die zweite Frage (usw bis 10 halt):


PHP:
var button_number:Number = 2;

Wie kann ich damit nun das Array durchsteppen, um den Wert auszulesen, welche Frage gerade aktuell ist? Ich müsste also den ersten Wert in der Eckigen Klammer (also hier die Null) mit den Wert aus der Variable (button_number) ersetzen: richtig_falsch[0][0]
Wie kann man das lösen?
 
Ok, ich habs rausbekommen. Man müsste es sos chreiben:

PHP:
richtig_falsch[button_number][0];

Allerdings merkt er sich die Variable nicht, die ich vorher über einen Button angelegt habe:

PHP:
var button_number:Number = 0;

Also schein der Weg über Variablen nicht der Richtige zu sein. Was sollte ich denn Anstelle einer Variable verwenden?
 
Zurück