PDA

Volledige versie bekijken : [XML] [Global Variabelen] probleem


thadrax
%Europe/Berlin %698 %2006, 17:46
hee hallo!

Ik ben bezig met een spelletje online. Het gaat om een quiz, die vragen, antwoorden en filmpjes etc. inlaad via XML. Dat inladen gaat allemaal prima eigenlijk, maar de variabelen waar ik de XML waarden inlaad, krijg ik niet global. Dus kan ik er niets meer mee na het inladen.

//XML WAARDEN WORDEN HIER BINNENGEHAALD VIA quizsettings.xml


//laad de XML file in

quizXML = new XML();
quizXML.ignoreWhite = true;
quizXML.onLoad = function()
{

//HAAL SPELERINFO OP
trace('----------------HAAL SPELERS OP------------');



_global.spelers = this.childNodes[0];

if( spelers.hasChildNodes() )
{
_global.speler1_nummer = spelers.childNodes[0].attributes.nummer;
_global.speler1_naam = spelers.childNodes[0].attributes.naam;
_global.speler1_geslacht = spelers.childNodes[0].attributes.geslacht;

_global.speler2_nummer = spelers.childNodes[1].attributes.nummer;
_global.speler2_naam = spelers.childNodes[1].attributes.naam;
_global.speler2_geslacht = spelers.childNodes[1].attributes.geslacht;

_global.speler3_nummer = spelers.childNodes[2].attributes.nummer;
_global.speler3_naam = spelers.childNodes[2].attributes.naam;
_global.speler3_geslacht = spelers.childNodes[2].attributes.geslacht;

_global.speler4_nummer = spelers.childNodes[3].attributes.nummer;
_global.speler4_naam = spelers.childNodes[3].attributes.naam;
_global.speler4_geslacht = spelers.childNodes[3].attributes.geslacht;

trace(speler1_naam + " is speler " + speler1_nummer + " en is een " + speler1_geslacht + ".");
trace(speler2_naam + " is speler " + speler2_nummer + " en is een " + speler2_geslacht + ".");
trace(speler3_naam + " is speler " + speler3_nummer + " en is een " + speler3_geslacht + ".");
trace(speler4_naam + " is speler " + speler4_nummer + " en is een " + speler4_geslacht + ".");

}


// HAAL BUREAUS OP

trace('----------------HAAL BUREAUS OP------------');


_global.bureaus = this.childNodes[1]

if( bureaus.hasChildNodes() )
{
_global.bureau1_nummer = bureaus.childNodes[0].attributes.nummer;
_global.bureau1_naam = bureaus.childNodes[0].attributes.naam;

_global.bureau2_nummer = bureaus.childNodes[1].attributes.nummer;
_global.bureau2_naam = bureaus.childNodes[1].attributes.naam;

trace(bureau1_naam + " is bureau " + bureau1_nummer + ".");
trace(bureau2_naam + " is bureau " + bureau2_nummer + ".");

}

//HAAL VRAGEN OP
trace('----------------HAAL VRAGEN OP------------');


_global.rondenummer = 1 //geef hier het nummer van de ronde op
_global.vraagnummer = 2 //geef hier het nummer van de vraag op

_global.mijnantwoord = 1 //invoer vanuit game

_global.ronde = this.childNodes[2].childNodes[rondenummer-1]; //sellecteer ronde

if( ronde.hasChildNodes() )
{

_global.vraag = ronde.childNodes[vraagnummer-1]; //sellecteer vraag

_global.vraag_content = vraag.childNodes[0].firstChild.nodeValue;
_global.vraag_antwoord1 = vraag.childNodes[1].firstChild.nodeValue;
_global.vraag_antwoord2 = vraag.childNodes[2].firstChild.nodeValue;
_global.vraag_antwoord3 = vraag.childNodes[3].firstChild.nodeValue;
_global.vraag_antwoord4 = vraag.childNodes[4].firstChild.nodeValue;

_global.vraag_correct = vraag.attributes.correct;

_global.vraag_material = vraag.attributes.material;
_global.vraag_materialtype = vraag.attributes.materialtype;
}

_global.aantalrondes = this.childNodes[2].childNodes.length;
_global.aantalvragen = ronde.childNodes.length;

trace ('Aantal rondes: ' + aantalrondes);
trace('Gekozen ronde: ' + rondenummer);
trace('');

trace ('Aantal vragen in ronde ' + ronde.attributes.nummer + ': ' + aantalvragen);
trace('Gekozen vraag: ' + vraagnummer);
trace('');

trace('Vraag: ' + vraag_content);
trace('Antwoord 1: ' + vraag_antwoord1);
trace('Antwoord 2: ' + vraag_antwoord2);
trace('Antwoord 3: ' + vraag_antwoord3);
trace('Antwoord 4: ' + vraag_antwoord4);
trace('Goed antwoord: ' + vraag_correct);
trace('');

trace('Materiaal (video/image/audio): ' + vraag_material + ' (' + vraag_materialtype + ')');

//Voorbeeld vraag beantwoorden

trace('----------------VOORBEELD ANTWOORD------------');


if (vraag_correct == mijnantwoord) {
trace(vraag_correct + ' is het goede antwoord!');
} else {
trace('je hebt nummer ' + mijnantwoord + ' geantwoord, nummer ' + vraag_correct + ' is het goede antwoord.');
}


}
quizXML.load('quizsettings.xml');

Ok er zitten een beetje veel traces in, maar hierdoor krijg ik een mooi overzichtje.
Dit is de XML file die ik inlees:

quizsettings.xml:

<?xml version "1.0" encoding="iso-8859-1" ?>
<!-- SPELERS -->

<spelers>
<speler nummer="1" naam="Naam1" geslacht="man"/>
<speler nummer="2" naam="Naam2" geslacht="vrouw"/>
<speler nummer="3" naam="Naam3" geslacht="man"/>
<speler nummer="4" naam="Naam4" geslacht="vrouw"/>
</spelers>

<bureaus>
<bureau nummer="1" naam="Reclamebureau 1"/>
<bureau nummer="2" naam="Reclamebureau 2"/>
</bureaus>

<!-- RONDE 1: Film -->

<rondes>
<ronde nummer="1">


<vraag nummer="1" correct="1" material="video1.flv" materialtype="video">

<content><![CDATA[Welke reclame is dit?]]></content>

<antwoord nummer="1"><![CDATA[Antwoord 1]]></antwoord>
<antwoord nummer="2"><![CDATA[Antwoord 2]]></antwoord>
<antwoord nummer="3"><![CDATA[Antwoord 3]]></antwoord>
<antwoord nummer="4"><![CDATA[Antwoord 4]]></antwoord>

</vraag>


<vraag nummer="2" correct="3" material="image2.jpg" materialtype="image">

<content>Enne welke reclame is dit?</content>

<antwoord nummer="1"><![CDATA[Antwoord 1]]></antwoord>
<antwoord nummer="2"><![CDATA[Antwoord 2]]></antwoord>
<antwoord nummer="3"><![CDATA[Antwoord 3]]></antwoord>
<antwoord nummer="4"><![CDATA[Antwoord 4]]></antwoord>

</vraag>





</ronde>


</rondes>


Kortom: hoe kan ik m'n variabelen in stand houden in mijn hele movie. Ik hoop dat jullie me kunnen helpen!

Groetjes

Daniel

theFlashWizard
%Europe/Berlin %756 %2006, 19:08
Gebruik geen globals, das bad-practice. Ik heb ze zelfs nooit nodig gehad.
Defineer ze 1x op de tijdlijn:
var variabelenaam:SoortVariabele
bijv:
var speler1_nummer:Number;

deze variabele vul je dan gewoon na het inladen zo in:
speler1_nummer = ...
en zal je gewoon op de hele tijdlijn onder die naam kunnen opvragen.
wanneer je dit vanaf een mc dieper moet doen doe je:
_parent.speler1_nummer

thadrax
%Europe/Berlin %393 %2006, 10:26
Hey thanks, beetje late reactie van me. Ik heb het nu op jouw manier gedefinieerd, alleen hij traced em nog steeds niet :S (zie onderaan code, ik krijg undefined). Het onderstaande actionscript staat op m'n eerste frame.

var speler1_nummer:Number;
var speler1_naam:String;
var speler1_geslacht:String;

var speler2_nummer:Number;
var speler2_naam:String;
var speler2_geslacht:String;

var speler3_nummer:Number;
var speler3_naam:String;
var speler3_geslacht:String;

var speler4_nummer:Number;
var speler4_naam:String;
var speler4_geslacht:String;




//XML WAARDEN WORDEN HIER BINNENGEHAALD VIA quizsettings.xml


//laad de XML file in

quizXML = new XML();
quizXML.ignoreWhite = true;
quizXML.onLoad = function()
{

//HAAL SPELERINFO OP
trace('----------------HAAL SPELERS OP------------');



spelers = this.childNodes[0];

if( spelers.hasChildNodes() )
{
speler1_nummer = spelers.childNodes[0].attributes.nummer;
speler1_naam = spelers.childNodes[0].attributes.naam;
speler1_geslacht = spelers.childNodes[0].attributes.geslacht;

speler2_nummer = spelers.childNodes[1].attributes.nummer;
speler2_naam = spelers.childNodes[1].attributes.naam;
speler2_geslacht = spelers.childNodes[1].attributes.geslacht;

speler3_nummer = spelers.childNodes[2].attributes.nummer;
speler3_naam = spelers.childNodes[2].attributes.naam;
speler3_geslacht = spelers.childNodes[2].attributes.geslacht;

speler4_nummer = spelers.childNodes[3].attributes.nummer;
speler4_naam = spelers.childNodes[3].attributes.naam;
speler4_geslacht = spelers.childNodes[3].attributes.geslacht;

trace(speler1_naam + " is speler " + speler1_nummer + " en is een " + speler1_geslacht + ".");
trace(speler2_naam + " is speler " + speler2_nummer + " en is een " + speler2_geslacht + ".");
trace(speler3_naam + " is speler " + speler3_nummer + " en is een " + speler3_geslacht + ".");
trace(speler4_naam + " is speler " + speler4_nummer + " en is een " + speler4_geslacht + ".");

}


// HAAL BUREAUS OP

trace('----------------HAAL BUREAUS OP------------');


bureaus = this.childNodes[1]

if( bureaus.hasChildNodes() )
{
bureau1_nummer = bureaus.childNodes[0].attributes.nummer;
bureau1_naam = bureaus.childNodes[0].attributes.naam;

bureau2_nummer = bureaus.childNodes[1].attributes.nummer;
bureau2_naam = bureaus.childNodes[1].attributes.naam;

trace(bureau1_naam + " is bureau " + bureau1_nummer + ".");
trace(bureau2_naam + " is bureau " + bureau2_nummer + ".");

}

//HAAL VRAGEN OP
trace('----------------HAAL VRAGEN OP------------');


rondenummer = 1 //geef hier het nummer van de ronde op
vraagnummer = 2 //geef hier het nummer van de vraag op

mijnantwoord = 1 //invoer vanuit game

ronde = this.childNodes[2].childNodes[rondenummer-1]; //sellecteer ronde

if( ronde.hasChildNodes() )
{

vraag = ronde.childNodes[vraagnummer-1]; //sellecteer vraag

vraag_content = vraag.childNodes[0].firstChild.nodeValue;
vraag_antwoord1 = vraag.childNodes[1].firstChild.nodeValue;
vraag_antwoord2 = vraag.childNodes[2].firstChild.nodeValue;
vraag_antwoord3 = vraag.childNodes[3].firstChild.nodeValue;
vraag_antwoord4 = vraag.childNodes[4].firstChild.nodeValue;

vraag_correct = vraag.attributes.correct;

vraag_material = vraag.attributes.material;
vraag_materialtype = vraag.attributes.materialtype;
}

aantalrondes = this.childNodes[2].childNodes.length;
aantalvragen = ronde.childNodes.length;

trace ('Aantal rondes: ' + aantalrondes);
trace('Gekozen ronde: ' + rondenummer);
trace('');

trace ('Aantal vragen in ronde ' + ronde.attributes.nummer + ': ' + aantalvragen);
trace('Gekozen vraag: ' + vraagnummer);
trace('');

trace('Vraag: ' + vraag_content);
trace('Antwoord 1: ' + vraag_antwoord1);
trace('Antwoord 2: ' + vraag_antwoord2);
trace('Antwoord 3: ' + vraag_antwoord3);
trace('Antwoord 4: ' + vraag_antwoord4);
trace('Goed antwoord: ' + vraag_correct);
trace('');

trace('Materiaal (video/image/audio): ' + vraag_material + ' (' + vraag_materialtype + ')');

//Voorbeeld vraag beantwoorden

trace('----------------VOORBEELD ANTWOORD------------');


if (vraag_correct == mijnantwoord) {
trace(vraag_correct + ' is het goede antwoord!');
} else {
trace('je hebt nummer ' + mijnantwoord + ' geantwoord, nummer ' + vraag_correct + ' is het goede antwoord.');
}


}
quizXML.load('quizsettings.xml');


trace('Check variabele speler1_naam: ' + speler1_naam); //Check of speler1_naam getraced kan worden

Enig idee waar het aan ligt? Alvast bedankt!

- Daniel

theFlashWizard
%Europe/Berlin %428 %2006, 11:16
alst goed is zie je dat de traces in onLoad later uitgevoert worden, logisch want aan xml hangt een laad tijd. jij zal je variabelen ook pas kunnen gebruiken na het inladen van de xml.
functies die de xml gebruiken zal je pas kunnen starten in die onLoad

thadrax
%Europe/Berlin %434 %2006, 11:25
ow man wat logisch :O soms kun je zo lang ***ten op iets wat een simpele oplossing heeft. Alsnog big thanks, want anders zat ik nog uren vast :D Gewoon een frame maken waar de boel geladen wordt dus. |)