[C++] Recompile nodig voor correct functioneren code

Pagina: 1
Acties:

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 23:11

Sponge

Serious Game Developer

Topicstarter
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
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
Step 2) We veranderen een coordinaat in de code. onbruikbare resultaten!
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!
Stap 3) We gaan het oude nummer weer gebruiken, resultaat: geen bruikbare coordinaten.
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.
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=1.5841471 y=54.445969 } bClockwise=true ...} LineSegment
+ this->linepath[i][1].ptStart {x=1.6227058 y=54.538235 } D3DXVECTOR2
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!

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?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-05 21:33

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hier helpt het wel om even de exacte compilerversie en -vendor te vermelden :)
Mijn eerste vermoeden gaat uit naar een precompiled header probleem in VC++

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 23:11

Sponge

Serious Game Developer

Topicstarter
Ah, ja sorry, ik mijn frustraties was ik dat wat vergeten.

VS2003 (ide), VC++. Precompiled headers, daar ga ik nu nog naar kijken. Toen ik net mijn frustraties buiten aan het uitleven was, kwam dat idee ook al bij mij binnen.


Maar toch blijft het vreemd. Waarom zou een getalletje zoveel uit kunnen maken, als er verder niets qua positie veranderd e.d.?

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 23:11

Sponge

Serious Game Developer

Topicstarter
:X :X. Opgelost, volgens mij.

#include "Freeimage.h"
#include "Path.h"
#include "Globals.h"

Moest dus

#include "Globals.h"
#include "Freeimage.h"
#include "Path.h"

zijn. Eerst nog heel wat meer testen... Ben nu blij, maar baal ook heel erg vanwege het tijdsverlies. :(. Overigens is geen van die drie een precompiled header, en wordt er maar 1 variabele gebruikt die niets te maken heeft met de rest van de code. Vaag..

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-05 21:33

.oisyn

Moderator Devschuur®

Demotivational Speaker

Precompiled headers staat ook gewoon uit? En die headers zitten ook allemaal gewoon in je project? Dan lijkt er iets mis met dependency checking... heb het zelf volgens mij ook weleens eerder gehad, een restart van visual studio was toen al een oplossing, maar dat heb je vast al geprobeerd? :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.