Flash & XML, logicaprobleem

Alles over programmeren en development binnen de IT-wereld
Plaats reactie
Gebruikersavatar
The_Borg
Elite Poster
Elite Poster
Berichten: 1759
Lid geworden op: 22 dec 2003, 20:25

Ok; beste medeflashers met Flash MX 2004; hier komt mijn vraag.
Al 3 dagen zit ik op 33 lijnen actionscript te kijken als een koe naar een trein. Ik vind de oplossing maar niet.

Mijn code wil simpelweg niet in de juiste volgorde uitvoeren. Het betreft hier een for lusje, dat 4 maal gegevens uit een XML-file haalt, iedere keer deze gegevens zijn opgehaald moet een movieclip geadd worden. Deze movieclip wordt gepositioneerd adhv 2 XML-elementen (de X en Y coördinaat).

Code: Selecteer alles

this.onRollOver = function()
	{
		for(intTeller = 0;intTeller < 4;intTeller++)
		{
				xmlladen(intTeller)
				trace("for loop " + intTeller)
				detailknop = this.attachMovie("detailknop_mc",["detailknop" + intTeller + "_mc"], 10);
				detailknop._x = intX
				detailknop._y = intY
		}
	}

//xml inladen//
xmlladen= function(intOnderdeel){
	trace("onderdeel:" +  intOnderdeel)
	records_XML = new XML();
	records_XML.ignoreWhite = true;
	records_XML.load("vaatwasserdetails.xml")
	records_XML.onLoad = function()
	{		
		
		trace("if: " + intOnderdeel)
		intX = records_XML.firstChild.childNodes[intOnderdeel].childNodes[0].childNodes[0]
		intY = records_XML.firstChild.childNodes[intOnderdeel].childNodes[1].childNodes[0]
		strBijschrift = records_XML.firstChild.childNodes[intOnderdeel].childNodes[2].childNodes[0]
		strBeschrijving = records_XML.firstChild.childNodes[intOnderdeel].childNodes[3].childNodes[0]
		strFoto = records_XML.firstChild.childNodes[intOnderdeel].childNodes[4].childNodes[0]
		
	}
}
De trace geeft volgend resultaat:

onderdeel:0
for loop 0
onderdeel:1
for loop 1
onderdeel:2
for loop 2
onderdeel:3
for loop 3
if: 0
if: 1
if: 2
if: 3

Het resultaat dat ik wil bekomen is het volgende:

onderdeel:0
for loop 0
if: 0
onderdeel:1
for loop 1
if: 1
onderdeel:2
for loop 2
if: 2
onderdeel:3
for loop 3
if: 3


Het kan dus aan mijn logica liggen, uit ervaring weet ik dat lang naar dezelfde code zitten kijken niet helpt. Daarom, als iemand van jullie mij uit mijn lijden kan verlossen, ik ben u eeuwig dankbaar. (dit omdat de flashsite binnenkort af moet zijn als zijnde een schoolproject :S)
"We are the Borg. Lower your shields and surrender your ships. We will add your biological and technological distinctiveness to our own. Your culture will adapt to service us. Resistance is futile."
Gebruikersavatar
Sensei Zeon
Elite Poster
Elite Poster
Berichten: 4143
Lid geworden op: 15 sep 2002, 09:08
Locatie: Belgium, Haacht
Contacteer:

even [code][/code] tags toegevoegd

[mod="meon"]hey, dat heb IK wel gedaan eh :p[/mod]
Your Sensei sends his greetz, SeNsEi Ze0n

Afbeelding
Gebruikersavatar
The_Borg
Elite Poster
Elite Poster
Berichten: 1759
Lid geworden op: 22 dec 2003, 20:25

Dank u, ik dacht dat ik ze er in had gestoken, blijkbaar niet ;).
"We are the Borg. Lower your shields and surrender your ships. We will add your biological and technological distinctiveness to our own. Your culture will adapt to service us. Resistance is futile."
Gebruikersavatar
Krekkie
Premium Member
Premium Member
Berichten: 645
Lid geworden op: 03 apr 2004, 14:27

Ken niets van Flash maar lees dit eens:
The load process is asynchronous; it does not finish immediately after the load method is executed. When load is executed, the XML object property loaded is set to false. When the XML data finishes downloading, the loaded property is set to true, and the onLoad method is invoked. The XML data is not parsed until it is completely downloaded.
Daaruit kan ik opmaken dat de for lus allang uitgevoerd is voordat de onLoad functie kans krijgt om uitgevoerd te worden.

Dus is de sequentie als volgt:
onderdeel:0
for loop 0
eerste load is bezig
onderdeel:1
for loop 1
eerste en tweede load zijn bezig
onderdeel:2
for loop 2
eerste, tweede en derde load zijn bezig
onderdeel:3
for loop 3
eerste, tweede, derde en vierde load zijn bezig
if: 0 --> eerste load is volledig uitgevoerd en onLoad wordt opgeroepen
if: 1 --> tweede load is volledig uitgevoerd en onLoad wordt opgeroepen
enz...

Hou er rekening mee dat ik er grandioos naast kan zitten :-)
Gebruikersavatar
The_Borg
Elite Poster
Elite Poster
Berichten: 1759
Lid geworden op: 22 dec 2003, 20:25

Mm, mijn bevindingen vertellen mij, dat wanneer ik gegevens tracht uit te lezen, het laatst uitgelezen element altijd het resultaat van het eerste element bevat. Ik begreep dit niet echt. Maar dit zou wel eens de verklaring kunnen zijn. Stel dat dit de oorzaak is (ik heb een serieus vermoeden dat het zo is), hoe los ik dit dan op?. Ik ben ook maar een beginnend flasher, die er voor dit vak gewoon moet door geraken :) . Je bent al zeer bedankt Krekkie ;).
"We are the Borg. Lower your shields and surrender your ships. We will add your biological and technological distinctiveness to our own. Your culture will adapt to service us. Resistance is futile."
Gebruikersavatar
Krekkie
Premium Member
Premium Member
Berichten: 645
Lid geworden op: 03 apr 2004, 14:27

Er blijkt een property 'loaded' te zijn waarmee je kan checken of de eerder gestarte load volledig uitgevoerd is. Zolang dat niet gebeurd is, moet je eigenlijk niets doen. Maar bestaat er geen functie die de load start en wacht tot deze gedaan is?
Gebruikersavatar
The_Borg
Elite Poster
Elite Poster
Berichten: 1759
Lid geworden op: 22 dec 2003, 20:25

Ja, daar heb ik ook al naar gezocht, maar nu ik het probleem ken, is de oplossing 1000 maal simpeler. De .onLoad maar 1 keer aanroepen in de code is namelijk voldoende, dus zet ik de for lus gewoon in de .onLoad ipv omgekeerd. Het is nog niet helemaal opgelost, maar nu kan ik mijn plan weer even trekken. Dank je Krekkie !
"We are the Borg. Lower your shields and surrender your ships. We will add your biological and technological distinctiveness to our own. Your culture will adapt to service us. Resistance is futile."
Gebruikersavatar
Krekkie
Premium Member
Premium Member
Berichten: 645
Lid geworden op: 03 apr 2004, 14:27

Dat is inderdaad een simpele oplossing.

Veel succes nog met het project.
Plaats reactie

Terug naar “Development”