Pages: 1
J'ai constaté que dans ma version d'Irrlicht (1.4), il y a quelque bugs de test de collision si par exemple, dans un pacman, on doit tester une collision entre le monstre et le pacman (je sais, encore une de mes idées bizarres de créer des jeux auparavant en 8bit en 3D ) :
mesh->getBoundingBox().intersectsWithBox(mesh2->getBoundingBox());
Testez un petit code qui envoie un message sur la console quand les deux mesh sont en collision : même si les mesh sont treees éloignés, il seront quand même détectes comme "en collision". Pour y remedier, un code Treeeees simple que je met a disposition (meme en connaissant le minimum dans n'importe quel langage, on peut le trouver) cela dit, cela peut etre utile de le retouver ici.
irr::core::vector3df posCam = camera->getPosition(); irr::core::vector3df posMesh = win->getPosition(); irr::f32 diametreCollison = 1.0f; if(posCam.X < posMesh.X + diametreCollision && posCam.X > posMesh.X - diametreCollision && posCam.Y < posMesh.Y + diametreCollision && posCam.Y > posMesh.Y - diametreCollision && posCam.Z < posMesh.Z + diametreCollision && posCam.Z > posMesh.Z - diametreCollision){ irr::gui::IGUIWindow * message = guienv->addMessageBox(L"Niveau Supérieur !!", L"Félicitations ! Vous passez au niveau superieur !!"); if(message->getCloseButton()->isPressed()){exit(0);} }
diametreCollision est un float permettant de connaitre le diametre de la collision, par Exemple pour un piège placé au sol invisible, de diamètre 10.0f ou un monstre de Pacman (ralalah, décidément, je l'aime, celui la ), de diametre 1.0f ou moins, ou encore un PNJ avec un champ de force autour de lui.
posCam est la position de la caméea (simple non ? ^^)
et enfin, posMesh est la position du mesh autour du quel se placera la bounding Box "faite maison". Apres, libre a vous de placer la box dans une aabox3d.
Dernière modification par Ma77hTheG33k (02-12-2009 20:54:18)
Hors ligne
Pages: 1