Pagina 1 van 1

Flash & XML, logicaprobleem

Geplaatst: 06 jan 2005, 23:26
door The_Borg
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)

Geplaatst: 06 jan 2005, 23:42
door Sensei Zeon
even [code][/code] tags toegevoegd

[mod="meon"]hey, dat heb IK wel gedaan eh :p[/mod]

Geplaatst: 06 jan 2005, 23:43
door The_Borg
Dank u, ik dacht dat ik ze er in had gestoken, blijkbaar niet ;).

Geplaatst: 07 jan 2005, 00:21
door Krekkie
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 :-)

Geplaatst: 07 jan 2005, 00:25
door The_Borg
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 ;).

Geplaatst: 07 jan 2005, 00:51
door Krekkie
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?

Geplaatst: 07 jan 2005, 01:18
door The_Borg
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 !

Geplaatst: 07 jan 2005, 01:24
door Krekkie
Dat is inderdaad een simpele oplossing.

Veel succes nog met het project.