#0 

12-12-2009 00:26:47

Ma77hTheG33k
Membre
Date d'inscription: 31-08-2009
Messages: 13

Bonjour tout de même smile,
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

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


#1 

12-12-2009 11:03:01

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

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 :

Code:

mesDh->setParent(camera);
...
mesDh->setPosition(irr::core::vector3df(camera->getPosition().X, -0.300993f, camera->getPosition().Z));

Hors ligne


#2 

12-12-2009 11:58:26

Ma77hTheG33k
Membre
Date d'inscription: 31-08-2009
Messages: 13

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


#3 

12-12-2009 14:30:03

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

c'est toujour plus constructif de trouver par soi-meme les solutions aux problemes  big_smile

Hors ligne


#4 

28-12-2009 14:23:06

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

Alors peut tu m'ésplique où est ton erreur car j'ai le même souci ! Merci d'avance !

Hors ligne


#5 

31-12-2009 10:28:13

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

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:

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.

Dernière modification par nabouill (31-12-2009 10:30:03)


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
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