Pages: 1
- Accueil forums
- » Aide Irrlicht C++
- » Un setParent qui bug... Irrlicht ou mon code ? .....
#1
Merci pour votre aide !!
Ma77hTheG33k
11-12-2009 23:26:47
- Ma77hTheG33k
- Membres
- Date d'inscription:
- Messages: 13
- IP: 86.198.127.13
- Courriel
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("\
Reste %ld balles", balles);
}
if(balles <= 0){
amgr->play3D("empty.wav", camera->getPosition());
}
/*if(selectedSceneNode == win && selectedSceneNode != couloir && cam && balles >= 0){
VieWin -= 25;
printf("\
VieWin : %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
Hors ligne
#2
12-12-2009 10:03:01
- firnafin
- Membres

- Date d'inscription:
- Messages: 150
- IP: 93.9.158.138
- Courriel
Voici un petit jeux : trouver l'erreur :
La doc :
setPosition (const core::vector3df &newpos)
Sets the position of the node relative to its parent.
ton code :
mesDh->setParent(camera);
...
mesDh->setPosition(irr::core::vector3df(camera->getPosition().X, -0.300993f, camera->getPosition().Z));Hors ligne
#3
12-12-2009 10:58:26
- Ma77hTheG33k
- Membres
- Date d'inscription:
- Messages: 13
- IP: 86.198.127.13
- Courriel
Je vois pas trop le problème...
EDIT : Ah, j'ai trouvé....
Hors ligne
#4
12-12-2009 13:30:03
- firnafin
- Membres

- Date d'inscription:
- Messages: 150
- IP: 93.9.158.138
- Courriel
c'est toujour plus constructif de trouver par soi-meme les solutions aux problemes ![]()
Hors ligne
#5
28-12-2009 13:23:06
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 79.85.248.174
- Courriel
Alors peut tu m'ésplique où est ton erreur car j'ai le même souci ! Merci d'avance !
Hors ligne
#6
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.
31-12-2009 09:28:13
- nabouill
- Membres

- Date d'inscription:
- Messages: 242
- IP: 93.13.111.104
- Courriel
jonath313 Ecris:
Alors peut tu m'ésplique où est ton erreur car j'ai le même souci
je pense que le problème venait de:
Code c++ :
mesDh->setPosition(irr::core::vector3df(camera->getPosition().X, -0.300993f, camera->getPosition().Z));Il ne faut pas faire un "camera->getPostion()". L'arme étant le fils de la camera. Un simple:
Code c++ :
mesDh->setPosition(irr::core::vector3df(0.0f, -0.300993f, 0.0f));devrais suffire.
Hors ligne



