Toon posts:

[Flash][ActionScript MX-2004)] Object, Array in Functies

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goeiedag,

Ik ben begonnen aan een XML parser voor flash, welke de values in een Array zet, in een Object.
Dit werkt verder allemaal perfect, de source is hieronder gegeven.

Nou wil ik de array uitlezen in dezelfde frame buiten de functie,
code:
1
trace(vragen.Blub.vraag0); // Eerste keer undefined, 3e keer juiste value

Dit lukt opzich wel, maar alleen als deze loopt..
1e, 2e keer: undefined
3e keer: de juiste value

Wat ik eigelijk wil weten wat ik nu verkeerd doe, of ik wat verkeerd doe, en het liefst hoe ik het kan oplossen..

note:
Ik ben hier nu al paar uur mee bezig, en kan niks vinden, het enige wat ik heb probeerd, wat ik kon bedenken, buiten het zoeken op google, vragen aan vrienden, en op IRC in de helpchannels, flashfocus, actionscript.org, etc, is het loop gedeelte wat schijnbaar wel werkt..

Actionscript:
http://www.xorc.nl/xml/actionscript.txt
XML:
http://www.xorc.nl/xml/db.xml
FLA:
http://www.xorc.nl/xml/xml.fla

  • sanderb
  • Registratie: November 2000
  • Laatst online: 20:29
het laden van je xml kost iets tijd. Het parsen vervolgens ook.
Waarschijnlijk is je xml nog niet geparsed op het moment dat die trace langs komt. Als je (de main timeline) loopt geef je hem meer tijd.

wat gebeurd er als je de trace net na de for loop zet, maar nog wel binnen de pars() functie?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function pars() {
    vragenNo = tehdb.firstChild.firstChild.childNodes.length;
    vragen = new Object();
    //new object created
    vragen.Blub = new Array();
    qList = new XML();
    qList = tehdb.firstChild.firstChild;
    myDB = qList.firstChild;
    for (var n = 0; n<vragenNo; n++) {
        vragen.Blub["vraag"+n] = myDB.firstChild.firstChild.nodeValue;
        vragen.Blub["antwoorda"+n] = myDB.firstChild.nextSibling.firstChild.nodeValue;
        vragen.Blub["antwoordb"+n] = myDB.firstChild.nextSibling.nextSibling.firstChild.nodeValue;
        vragen.Blub["antwoordc"+n] = myDB.firstChild.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
        myDB = myDB.nextSibling;
    }
trace(vragen.Blub.vraag0);
}


flash voert dan de trace pas uit op het moment dat de for loop klaar is, en je array zou dan wel gevuld moeten zijn.

" A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools. " - Douglas Noel Adams


Verwijderd

Topicstarter
sanderb schreef op donderdag 17 maart 2005 @ 23:26:
...
wat gebeurd er als je de trace net na de for loop zet, maar nog wel binnen de pars() functie?
....
dan werkt het zoals ik beschreef,
alleen het idee was juist een object met een array te hebben met een hele lijst met vragen,
zodat ik random daar vragen uit kan halen, dit bedoelt voor een spelletje,
(memory) waar je na elke keer goed gegokt te hebben een random vraag krijgt.

  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 25-03 10:55

XangadiX

trepanatie is zóó kinderachtig

er is toch een XML.onLoadComplete oid?

dan kun je een listener maken die hem roept op het moment dat ie wat te doen heeft (en maar 1x)

Stoer; Marduq


Verwijderd

Topicstarter
XangadiX schreef op vrijdag 18 maart 2005 @ 14:18:
er is toch een XML.onLoadComplete oid?

dan kun je een listener maken die hem roept op het moment dat ie wat te doen heeft (en maar 1x)
hmm ben er nu een klein uurtje aan het zoeken, maar om eerlijk te zijn...
ik snap er geen hol van :|
(Hetgeen dat hij het _alleen_ doet als hij 1x geloopt is, verbaasd mij nog het meest, al begrijp ik de onLoadComplete ook niet, nog ff verder zoeken)

  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 25-03 10:55

XangadiX

trepanatie is zóó kinderachtig

hmm even zelf wat handige linkjes voor je zoeken:

http://www.macromedia.com...script_dictionary849.html

sorry, ik noemde onLoadComplete (ofzo) maar het is dus XML.onData

Het idee is dat je een bepaalde functie aanroept als je XML volledig is ingeladen. Hij zit dan in een virtueel document in je flash en je kunt hem ook als zodanig behandelen (aanpassen en terugsturen naar een server bijvoorbeeld)

Verder is er nog een lijst met alle methods van het XML object
http://www.macromedia.com...script_dictionary827.html

succes!

Stoer; Marduq


  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 03-05 20:51
En wat nou als je het tracen gewoon in de pars functie doet? Dan weet je zeker dat hij bestaat :). Je zou de pars functie ook nog iets kunnen laten aanroepen om aan te geven dat hij klaar is.

  • LB Back
  • Registratie: November 2004
  • Laatst online: 14-03 23:22
Je kunt de xml-file aan een loadVars object hangen en dan if(object.loaded){trace("blabla")};

Verwijderd

Topicstarter
McVirusS schreef op vrijdag 18 maart 2005 @ 17:35:
En wat nou als je het tracen gewoon in de pars functie doet? Dan weet je zeker dat hij bestaat :). Je zou de pars functie ook nog iets kunnen laten aanroepen om aan te geven dat hij klaar is.
nou, ik weet wel zeker dat het bestaat, want hij doet t na de 2e keer aanspreken (de loop)
en dat aanspreken van iets in de pars functie, zoals een andere functie, een var aangeven, oid heb ik ook al probeerd, maar no such luck..

ik ga even de andere oplossingen uitproberen :)

Verwijderd

Topicstarter
ik heb het opgelost!
het lag eraan dat ik de variabelen niet globaal maakte,
een _root. voor de variabelen loste het op,
zodat ik het in een ander frame kon aanspreken.

hartelijk bedankt, soms raak je je overzicht kwijt ;)

Verwijderd

Ik heb een soortgelijk probleem als jij, ik krijg ook pas na 1 loop de waarden uit de array (eerste keer is undefined).
Nu heb jij het opgelost, kun jij misschien iets meer duidelijkheid geven over hoe je dat hebt gedaan.

ps. mijn xml to object parser draait in een lege MovieClip en herhaalt zicht met een onClipEvent (enterFrame)
Pagina: 1