Toon posts:

[ActionScript] recursieve functies...

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een simpel doolhof opgezet doormiddel van een 2dimensionale array met daarin boolean waardes. True == looppad, False == muur.

om alle mogelijke uitwegen te bepalen bekijk ik per positie of ik omhoog kan, zoniet, naar links kan, zoniet, naar beneden kan en uiteindelijk of ik naar rechts kan. Blijkt dit niet te kunnen, dan ga ik een stap terug, en bekijk weer de volgende richting enz...enz... simpel backtracking algoritme, maar wel effectief.

ik had ooit zoiets in JAVA gemaakt, dus dat heb ik aangepast naar de syntax van ActionScript, maar helaas krijg ik de volgende melding van FlashMX 2004 pro:
code:
1
2
3
256 levels of recursion were exceeded in one action list.
This is probably an infinite loop.
Further execution of actions has been disabled in this movie.


bij hele kleine doolhoven werkt t prima, maar ietsje te groot en Flash vertelt me dat ik een oneindige loop heb...wat natuurlijk niet t geval is.

Ik vroeg me dus af, is hier een simpele workaround voor, of weet iemand of die limiet van 256 levels te veranderen is???

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Probeer dit eens:

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
var recursiveFuncIntervalID;

function recursiveFunc(param)
{
  recursiveFuncIntervalID = setInterval(callRecursiveFunc, 1, param + 1);
}

function callRecursiveFunc(param)
{
  clearInterval(recursiveFuncIntervalID);
  recursiveFunc(param);
}

Noushka's Magnificent Dream | Unity


Verwijderd

Topicstarter
Bedankt voor je reactie. Ik had t inmiddels opgelost met een zeer uitgebreidde while loop. Maar flash is er gewoon niet snel genoeg voor...helaas...

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 30-04 12:26
Verwijderd schreef op maandag 05 september 2005 @ 10:20:
Bedankt voor je reactie. Ik had t inmiddels opgelost met een zeer uitgebreidde while loop. Maar flash is er gewoon niet snel genoeg voor...helaas...
Misschien kunnen we je helpen als je wat meer van je code post? :)

Verwijderd

Topicstarter
ik heb m dus nu inmiddels met een while loopie. Ik heb m ook met JAVA getest, en daar doet ie t zonder bedenktijd :). Maar flash rekent niet zo vlot helaas...

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function findPaths(pad:Array, p2:Object):Void{
    while(pad.length > 0){
        var p1 = getLast(pad);
        if(hasNextPosition(p1) && pad.length){
            var nextP:Object = getNextPosition(p1);
            if(equals(nextP,p2)){
                paden.push(pad);
                pad.pop();
            }else if(!contains(pad,nextP)){
                pad.push(nextP);
            }
        }else{
            pad.pop();
        }
    }
}


je hebt dus een array als volgt:
code:
1
2
3
4
5
6
7
8
var doolhof:Array = [[0,0,0,0,0,0,0,0],
                     [0,1,1,1,1,1,1,0],
                     [0,1,0,0,0,0,1,0],
                     [0,1,1,1,1,0,1,0],
                     [0,1,0,1,1,1,1,0],
                     [0,1,0,1,0,0,1,0],
                     [0,1,1,1,0,1,1,0],
                     [0,0,0,0,0,0,0,0]]


de functie hasNextPosition(p:Object) kijkt wat de richting van het object is, en vervolgens of er in die richting een 1staat. In dit geval geeft ie true terug. Staat er een 0, dan kijkt ie in de volgende richting, totdat er een 1 staat. veranderd dan de richting van het object en geeft true terug. Zijn er in alle richtingen geen mogelijkheden, dan geeft ie false terug.

getNextPosition(p:Object) maakt een nieuw object aan met de x en y waarden van die nieuwe positie. De rest van de code lijkt me vrij duidelijk...

Het is allemaal niet ingewikkeld, maar er zitten nogal wat mogelijke posities in zo'n doolhof en per positie wordt er 4 keer een richting gecontroleerd...en das dus iets teveel van t goede...ik denk niet dat er met flash een oplossing voor is...