Bonjour,
j'essaie de créer un système de PathFinding mais je patauge
J'ai commencé à regarder un peux les algorithmes (surtout A*) et j'ai réussi à écrire un bout de code mais j'ai une boucle infini et je ne sais pas d'où viens le problème
voici le code :
//PathFinding.h #include <iostream> #include <irrlicht.h> class PathFinding { public: PathFinding(irr::scene::ISceneManager* smgr); void FindPath(irr::scene::ISceneNode* StartPoint, irr::scene::ISceneNode* EndPoint); private: irr::scene::ISceneManager* m_smgr; irr::scene::ISceneNode* m_StartPoint; irr::scene::ISceneNode* m_EndPoint; irr::scene::ISceneNode* m_PointBuffer; irr::core::list<irr::scene::ISceneNode*> RootChild; irr::core::list<irr::scene::ISceneNode*>::ConstIterator debut; irr::core::list<irr::scene::ISceneNode*>::ConstIterator fin; irr::core::line3df Distance; int OldDistance; const irr::c8* BestNode; };
//PathFinding.cpp #include "PathFinding.h" using namespace std; PathFinding::PathFinding(irr::scene::ISceneManager* smgr) { m_smgr = smgr; }; void PathFinding::FindPath(irr::scene::ISceneNode* StartPoint, irr::scene::ISceneNode* EndPoint) { m_StartPoint = StartPoint; m_EndPoint = EndPoint; RootChild = m_smgr->getRootSceneNode()->getChildren(); debut = m_smgr->getRootSceneNode()->getChildren().begin(); fin = m_smgr->getRootSceneNode()->getChildren().end(); BestNode = m_StartPoint->getName(); while(debut != fin || m_EndPoint->getName() != BestNode) { Distance.start = m_StartPoint->getPosition(); Distance.end = (*debut)->getPosition(); if(OldDistance > Distance.getLength() && (*debut)->getID() != 3) { OldDistance = Distance.getLength(); BestNode = (*debut)->getName(); }; if(debut != fin) { debut++; } if(debut == fin && m_EndPoint->getName() != BestNode) { debut = m_smgr->getRootSceneNode()->getChildren().begin(); fin = m_smgr->getRootSceneNode()->getChildren().end(); while((*debut)->getName() != BestNode) { debut++; }; m_StartPoint = (*debut); debut = m_smgr->getRootSceneNode()->getChildren().begin(); fin = m_smgr->getRootSceneNode()->getChildren().end(); }; }; };
Pour info j'ai attribué un Id de 3 à la camera pour pas qu'elle soit comptée
Si vous aviez des conseilles sa m'arrangerais
Merci d'avance
Hors ligne
A tout hasard, sans me pencher plus sur ton code, je remplacerais le || de ta condition de boucle par un &&.
while(debut != fin && m_EndPoint->getName() != BestNode)
Dernière modification par Perceval (01-09-2008 13:44:45)
Hors ligne
Non ça marche pas
mais merci quand même
Ma boucle est infini mais je vois pas pourquoi puisque les conditions sont possible
Dernière modification par bestben (02-09-2008 01:59:40)
Hors ligne
je voudrait savoir si certain on tester Irrnet et ce qu'ils en ont pensé
Car moi perso j'ai voulu l'essayer mais c'était complètement bugué (plusieurs version)
Ou si vous connaissé une bonne bibliothèque résaux facile d'utilisation (ou plutôt pas trop dur ^^)
Merci pour vos réponse
Hors ligne
Mayya,
Merci de créer un nouveau sujet pour tes questions car ici tu pollues des posts qui n'ont rien à voir !
Hors ligne