Bonjour tout de même ,
Aujourd'huin ayant fait l'arme de mon FPS futuriste, j'ai voulu faire un setParent a la camera, mais ca ne se voit pas.. Quand j'envoie un message sur la console, ca me met toujours les memes coordonées...
Voici mon bout de code
#include <irr/irrlicht.h> #include <irr/irrKlang.h> #include <iostream> #include "Window.h" #include "EventReceiver.h" #define HAUTEUR_SOL -0.447954f using namespace irr; using namespace std; Window::Window(){} Window::Window(int x1, int y1, int color1, bool fullscreen1){ //Initialisation x = x1; y = y1; color = color1; fullscreen = fullscreen1; //Création de la fenetre et des managers device = irr::createDevice(video::EDT_OPENGL, irr::core::dimension2d<u32>(600, 600) ,color,fullscreen,true,false,0); amgr = irr::audio::createIrrKlangDevice(); driver = device->getVideoDriver(); smgr = device->getSceneManager(); cmgr = smgr->getSceneCollisionManager(); emgr = new EntityManager(smgr, amgr); guienv = device->getGUIEnvironment(); //La gui initGUI(); //La caméra irr::SKeyMap keyMap[5]; keyMap[0].Action = irr::EKA_MOVE_FORWARD; keyMap[0].KeyCode = irr::KEY_KEY_Z; keyMap[1].Action = irr::EKA_MOVE_BACKWARD; keyMap[1].KeyCode = irr::KEY_KEY_S; keyMap[2].Action = irr::EKA_STRAFE_LEFT; keyMap[2].KeyCode = irr::KEY_KEY_Q; keyMap[3].Action = irr::EKA_STRAFE_RIGHT; keyMap[3].KeyCode = irr::KEY_KEY_D; keyMap[4].Action = irr::EKA_JUMP_UP; keyMap[4].KeyCode = irr::KEY_SPACE; camera = smgr->addCameraSceneNodeFPS(0,185.0f,0.001f,-1, keyMap, 5, true, 0.03256501f); camera->setFarValue(camera->getFarValue() + 20000.0f); camera->setNearValue(0.03f); camera->setPosition(irr::core::vector3df(-8.486232f, 0.22f, -5.292462f)); camera->setTarget(irr::core::vector3df(-7.132532f, -0.294052f, -5.266525f)); //Le labyrinthe mesh = smgr->getMesh("Labyrinthe(1_1).obj"); couloir = smgr->addAnimatedMeshSceneNode(mesh); couloir->setMaterialFlag(irr::video::EMF_LIGHTING, false); couloir->setMaterialTexture(0, driver->getTexture("Labyrinthe(1_1)_cube.tga")); couloir->setScale(irr::core::vector3df(0.8f, 0.6f, 0.8f)); //Une arme irr::scene::IAnimatedMeshSceneNode * mesDh = smgr->addAnimatedMeshSceneNode(smgr->getMesh("TMP.obj")); mesDh->setParent(camera); mesDh->setMaterialFlag(irr::video::EMF_LIGHTING, false); mesDh->setMaterialTexture(0, driver->getTexture("TMP_Pistolet.tga")); mesDh->setPosition(irr::core::vector3df(camera->getPosition().X, -0.300993f, camera->getPosition().Z)); mesDh->setScale(irr::core::vector3df(0.01f, 0.01f, 0.01f)); //Les caisses de Munitions entityMap[0] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-3.5444f, HAUTEUR_SOL, 2.2879f)); entityMap[1] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-2.8300f, HAUTEUR_SOL, -5.8900f)); entityMap[2] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-2.0500f, HAUTEUR_SOL, -1.8100f)); entityMap[3] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-2.9100f, HAUTEUR_SOL, 0.4300f)); entityMap[4] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-0.4100f, HAUTEUR_SOL, -0.8300f)); entityMap[5] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-0.0700f, HAUTEUR_SOL, 2.0600f)); //Collision selector = smgr->createOctTreeTriangleSelector(mesh->getMesh(0), couloir, 32); couloir->setTriangleSelector(selector); anim = smgr->createCollisionResponseAnimator( selector, camera, core::vector3df(0.0600f,0.3f,0.0600f), core::vector3df(0,-0.1f,0), core::vector3df(0,0.01f,0), 1); camera->addAnimator(anim); //Captage des Events EventReceiver receiver(driver, camera); device->setEventReceiver(&receiver); //Viseur device->getCursorControl()->setVisible(false); irr::video::ITexture * tmp = driver->getTexture("viseur_nozoom.png"); scene::IBillboardSceneNode* viseur = 0; viseur = smgr->addBillboardSceneNode(0, core::dimension2d<f32>(0.1f,0.1f)); viseur->setPosition(irr::core::vector3df(-8.298266f, 0.22f, -5.288859f)); viseur->setMaterialType(irr::video::EMT_TRANSPARENT_ALPHA_CHANNEL); viseur->setMaterialFlag(video::EMF_LIGHTING, false); viseur->setMaterialFlag(video::EMF_ZBUFFER, false); viseur->setMaterialTexture(0, tmp); camera->addChild(viseur); vie = 100; rechargeMax = 1000; recharge = 1000; balles = 20; couché = false; while(device->run()) { cout << "X : " << mesDh->getPosition().X << "Y : " << mesDh->getPosition().Y << "Z : " << mesDh->getPosition().Z << endl; //Camera bool cam = receiver.update(driver, camera); //Ciblage line = smgr->getSceneCollisionManager()->getRayFromScreenCoordinates( device->getCursorControl()->getPosition(), device->getSceneManager()->getActiveCamera()); selectedSceneNode = smgr->getSceneCollisionManager()->getSceneNodeFromRayBB(line); //Attaque if(recharge>=73){ if(cam){ if(balles >= 0){amgr->play3D("gunC.wav", camera->getPosition()); printf("\nReste %ld balles", balles); } if(balles <= 0){ amgr->play3D("empty.wav", camera->getPosition()); } /*if(selectedSceneNode == win && selectedSceneNode != couloir && cam && balles >= 0){ VieWin -= 25; printf("\nVieWin : %ld", VieWin); } if(VieWin == 0){ amgr->play3D("mort.wav", win->getPosition()); VieWin--; } */ if(selectedSceneNode == couloir && cam && balles >= 0){ irr::core::vector3df impact; irr::core::triangle3df triangleImpact; const irr::scene::ISceneNode * nodeImpact; cmgr->getCollisionPoint(line, selector, impact, triangleImpact, nodeImpact); amgr->play3D("metal.wav", impact); } if(balles >= 0){balles--;} recharge = 0; cam = false; } } recharge++; //Titre core::vector3df posCam = camera->getPosition(); wchar_t titre[1000]; swprintf(titre, 1000, L"X : %f Y : %f Z : %f", posCam.X, posCam.Y, posCam.Z); device->setWindowCaption(titre); //Munitions balles += emgr->updateMunitionsBox(entityMap[0], camera, balles); balles += emgr->updateMunitionsBox(entityMap[1], camera, balles); balles += emgr->updateMunitionsBox(entityMap[2], camera, balles); balles += emgr->updateMunitionsBox(entityMap[3], camera, balles); balles += emgr->updateMunitionsBox(entityMap[4], camera, balles); balles += emgr->updateMunitionsBox(entityMap[5], camera, balles); if(balles >= 100){balles = 100;} swprintf(ballesTxt, 1000, L"%ld Balles", balles); //Dessin des meshs 3D driver->beginScene(true, true, video::SColor(255,0,0,0)); smgr->drawAll(); guienv->drawAll(); amgr->setListenerPosition(camera->getPosition(), camera->getTarget()); driver->endScene(); } guienv->drawAll(); device->drop(); exit(0); } void Window::initGUI(){ } Window::~Window(){ delete device; delete driver; delete smgr; delete selectedSceneNode; delete guienv; delete skin; delete camera; delete couloir; delete emgr; delete mesh; delete anim; delete selector; }
Merci pour votre aide !!
Ma77hTheG33k
Dernière modification par Ma77hTheG33k (12-12-2009 00:27:38)
Hors ligne
Je vois pas trop le problème...
EDIT : Ah, j'ai trouvé....
Dernière modification par Ma77hTheG33k (12-12-2009 12:53:39)
Hors ligne
c'est toujour plus constructif de trouver par soi-meme les solutions aux problemes
Hors ligne
Alors peut tu m'ésplique où est ton erreur car j'ai le même souci ! Merci d'avance !
Hors ligne
jonath313 :
Alors peut tu m'ésplique où est ton erreur car j'ai le même souci
je pense que le problème venait de:
Il ne faut pas faire un "camera->getPostion()". L'arme étant le fils de la camera. Un simple:
devrais suffire.
Dernière modification par nabouill (31-12-2009 10:30:03)
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 20 invités en ligne Aucun membre connecté RSS Feed |