PDA

Volledige versie bekijken : lag met nested loops


jeroenman
%Europe/Berlin %586 %2010, 15:04
ik probeer een platformer spel te maken waarin je boxen kan verschuiven enzo. nu heb ik platforms gemaakt die p1, p2, p3 enz. heten en boxen die b1, b2, b3 enz heten.

ik gebruik de volgende code om voor elke box collision te checken met elk platform:

for (i=1; i<=boxes; i++)
{
box = _root["b"+i];
for (j=1; j<=platforms; j++)
{
plat = _root["p"+j];
if (box.hitTest(plat))
{
if (box._y+box._height/2-1 < plat._y+plat._height)
{
box._y = plat._y- plat._height/2-box._height/2-.1;
}
}
}
}

nu is het probleem dat ik enorm veel lag krijg op deze manier. is er een andere of betere manier om dit te doen?

Dauntless
%Europe/Berlin %597 %2010, 15:20
Dat is er zeker. Het is helemaal niet nodig om elke box met elke andere box te testen. Een box die helemaal links in het veld ligt moet bv niet gechecked worden met een box die helemaal rechts ligt.

Een van de beste technieken die ik tot nu toe ben tegengekomen is RDC. Een goede uitleg vind je hier:
http://lab.polygonal.de/articles/recursive-dimensional-clustering/ (de code is AS3, maar het gaat om de techniek/algoritme)

Jan
%Europe/Berlin %604 %2010, 15:30
Onderaan het artikel zie ik:
the AVM2 is very fast, so unless you use expensive collision tests or have a large number of objects, a simple brute force comparison with a bounding sphere distance check is still faster than RDC.

Als je op zoek bent naar performance dan moet je zowiezo AS3 gebruiken en niet AS2.

Jan

Dauntless
%Europe/Berlin %610 %2010, 15:39
Ik ga er dus van uit dat hij veel boxen heeft :D. Anders zou zijn brute-force sowieso niet mogen hangen tenzij hij op een erg oude computer zit (Of Flash Lite natuurlijk).

jeroenman
%Europe/Berlin %626 %2010, 16:01
jep ik zit op een trage laptop, maar heb eigenlijk nooit veel last van lag met flash.

maar bedankt voor die link! ik zal nog ff kijken of ik nog steeds last heb van lag als ik overstap op as3. ik hoop van niet, dat houd t wel wat simpeler.