PDA

Volledige versie bekijken : recursive Functie werkt nie


theFlashWizard
%Europe/Berlin %640 %2005, 16:21
hoi mensjes,
was nog steeds bezig met die XML, ben er nu ook achter hoe het heet, maar het lukt nog steeds niet..

hier een beter voorbeeld als script en als fla :)
mc.A = 3
mc1.A = 1
mc11.A = 1
mc111.A = 0
mc2.A = 2
mc21.A = 1
mc211.A = 0
mc22.A = 1
mc221.A = 0
mc3.A = 1
mc31.A = 1
mc311.A = 0

//----------MC meegeven als argument----------
function makeRed(parentMC){
for(i=1;i<=parentMC.A;i++){
currentName = parentMC._name+i
currentMc = this[currentName]
color = new Color(currentMc)
color.setRGB(0xFF0000)
if(currentMc.A > 0){
makeRed(currentMc)
//nu pakt hij dus alleen de 1ste en dan zo diep als hij kan.
//dus mc1, mc11 en mc111.
//met hem als comment pakt hij alleen het hoogste niveau.
//dus mc1, mc2, mc3
//hij stop dus op de 1 of andere manier me for loop
}
}
}

makeRed(mc)

//----------naam meegeven als argument----------
/*
function makeRed(parentName){
parentMc = this[parentName]
for(i=1;i<=parentMc.A;i++){
trace(i)
currentName = parentName+i
currentMc = this[currentName]
color = new Color(currentMc)
color.setRGB(0xFF0000)
if(currentMc.A > 0){
makeRed(currentName)
//nu pakt hij dus alleen de 1ste en dan zo diep als hij kan.
//dus mc1, mc11 en mc111.
//met hem als comment pakt hij alleen het hoogste niveau.
//dus mc1, mc2, mc3
//hij stop dus op de 1 of andere manier me for loop
}
}
}

makeRed("mc")
*/

//----------amount en naam meegeven als argumenten----------
/*
function makeRed(A,oldName){
for(i=1;i<=A;i++){
newName = oldName+i
mc = this[newName]
color = new Color(mc)
color.setRGB(0xFF0000)
if(mc.A > 0){
makeRed(mc.A,newName)
//nu pakt hij dus alleen de 1ste en dan zo diep als hij kan.
//dus mc1, mc11 en mc111.
//met hem als comment pakt hij alleen het hoogste niveau.
//dus mc1, mc2, mc3
//hij stop dus op de 1 of andere manier me for loop
trace(newName)
}

}
}

makeRed(mc.A,"mc")
*/

3 probeersels dus al gehad en geen werkt er.. wat doe ik fout? :$
Alvast bedankt!

Dauntless
%Europe/Berlin %678 %2005, 17:17
Je probleem is: Je gebruikt telkens dezelfde i. Dat mag dus niet :)

for(var i = ... en hij werkt ;)

theFlashWizard
%Europe/Berlin %792 %2005, 20:01
echt? :|:|
ik nam aan dat de i=1 de i weer op 1 zou zetten..
raar..
maar idd het werkt! :):)
thnx! en ik nog wel zo *****.. terwijl et zo simpel is..
kan je me mischien alleen nog uitleggen waarom het op 1 zetten van de i niet genoeg is?
alvast bedankt

Dauntless
%Europe/Berlin %920 %2005, 23:05
Omdat wanneer je een level dieper gaat je dezelfde i gebruikt. Die staat in het eerste geval dus op 1 maar wordt dan verhoogt tot 3. Omdat (wanneer je terug gaat naar je 'top' functie) de i dan al aan het maximum zit wordt de rest van de for loop niet meer uitgevoerd.

Snap je? :I

theFlashWizard
%Europe/Berlin %120 %2005, 03:54
ow owke..
want als je een var ervoor zet zorg je ervoor dat die variabele alleen in die functie bestaat toch? :)

Pointer
%Europe/Berlin %147 %2005, 04:31
Alleen binnen de lus ja. ook wel local scope genoemt.
Als deze is uitgevoerd heeft hij hem dus ook niet meer nodig.

Als je hem boven de functie zet is hij overal te benaderen.
en bestaan zolang het object bestaat waaraan hij gekoppeld wordt.