Ik open niet zo gauw een topic, maar dit is dan ook een "handen in m'n haar" probleem. Ik heb nu twee dagen zitten klooien op het volgende probleem. Ik ben een stuk C++ code aan het bijwerken zodat het in mijn spel past. Het is een pathfinding (A*) algorithme wat rekening houdt met draaicirkels e.d.
Aangezien ik zelf niet zo denderend ben met wiskunde, kwam dit natuurlijk heel mooi uit. Helaas wordt ik nu geplaagt door een zeer vreemd probleem.
Ik zal de situatie eens mooi beschrijven:
Het probleem ontstaat in de code die de lijnen tussen de punten (die a* geproduceert heeft) maakt.
Stap 1) 100% OK
DirectX debugger geeft geen mem leaks (meer) aan, die heb ik allemaal opgelost vandaag. De pathfinding gebruikt alleen statische arrays, en er wordt nergens een alloc of new gebruikt.
Ik ben totaal radeloos. Heeft iemand hier ooit zoiets ervaren?
Aangezien ik zelf niet zo denderend ben met wiskunde, kwam dit natuurlijk heel mooi uit. Helaas wordt ik nu geplaagt door een zeer vreemd probleem.
Ik zal de situatie eens mooi beschrijven:
Het probleem ontstaat in de code die de lijnen tussen de punten (die a* geproduceert heeft) maakt.
Stap 1) 100% OK
Step 2) We veranderen een coordinaat in de code. onbruikbare resultaten!Points = PathFinder->FindPath(D3DXVECTOR2(10,6),D3DXVECTOR2(1,54), 0, path);
Lines = PathFinder->ComputeRoute1(path[i].pos, path[i+1].pos,1.0, &this->linepath[i][0]);
Quote van linepath (quickwatch):
+ this->linepath[i][0] {bCircle=true ptOrigin={x=1.5841471 y=54.445969 } bClockwise=true ...} LineSegment
+ this->linepath[i][1].ptStart {x=1.6227058 y=54.538235 } D3DXVECTOR2
Stap 3) We gaan het oude nummer weer gebruiken, resultaat: geen bruikbare coordinaten.Points = PathFinder->FindPath(D3DXVECTOR2(10,7),D3DXVECTOR2(1,54), 0, path);
Lines = PathFinder->ComputeRoute1(path[i].pos, path[i+1].pos,1.0, &this->linepath[i][0]);
Quote van linepath (quickwatch):
+ this->linepath[i][0] {bCircle=true ptOrigin={x=2.8147496e+013 y=-2.7255292e-012 } bClockwise=true ...} LineSegment
+ this->linepath[i][1].ptStart {x=-1.0737418e+008 y=-1.0737418e+008 } D3DXVECTOR2
Let op: De punten zijn nogsteeds 100% goed!
Step 4) Het probleem blijft dus. Nu voegen we een spatie toe ergens, random in de code van de pathfinding: 100% goede coordinaten weer!Points = PathFinder->FindPath(D3DXVECTOR2(10,6),D3DXVECTOR2(1,54), 0, path);
Lines = PathFinder->ComputeRoute1(path[i].pos, path[i+1].pos,1.0, &this->linepath[i][0]);
Quote van linepath (quickwatch):
+ this->linepath[i][0] {bCircle=true ptOrigin={x=2.8147496e+013 y=-2.7255292e-012 } bClockwise=true ...} LineSegment
+ this->linepath[i][1].ptStart {x=-1.0737418e+008 y=-1.0737418e+008 } D3DXVECTOR2
Opnieuw is de "points" array 100% ok.
Het gaat dus mis als ik een coordinaat verander in de code. Zelfs als ik het weer terugzet. Geen enkele wijziging werkt, totdat path.cpp recompiled is!Points = PathFinder->FindPath(D3DXVECTOR2(10,6),D3DXVECTOR2(1,54), 0, path);
Lines = PathFinder->ComputeRoute1(path[i].pos, path[i+1].pos,1.0, &this->linepath[i][0]);
Quote van linepath (quickwatch):
+ this->linepath[i][0] {bCircle=true ptOrigin={x=1.5841471 y=54.445969 } bClockwise=true ...} LineSegment
+ this->linepath[i][1].ptStart {x=1.6227058 y=54.538235 } D3DXVECTOR2
DirectX debugger geeft geen mem leaks (meer) aan, die heb ik allemaal opgelost vandaag. De pathfinding gebruikt alleen statische arrays, en er wordt nergens een alloc of new gebruikt.
Ik ben totaal radeloos. Heeft iemand hier ooit zoiets ervaren?