Historique des modifications - Message

Message #10412

Sujet: [Debutant]plantage de programme lors de la creation de mesh


Type Date Auteur Contenu
Création du message 01-04-2012 23:09:55 Dante03
Bonsoir je suis débutant avec irrlicht et je tente de développer un simple jeu de plateau (jeu de go plus exactement) pour l'instant j'ai un mesh en forme de pierre de go que je peut balader sur le Goban (plateau du jeu de go),je voudrais lors d'un clic placer la pierre en question , problème la pierre ce place le programme cesse de fonctionner plante et puis demande a être fermer ,je vous poste mon code en espérant recevoir un peu d'aide ^^ ,aussi je n'aipas beaucoup d'idées de comment structurer mon programme pour gerer les évènement sur le code présenter j'utilise une Class imbriquer ,peut etre y'a t'il un meilleur moyen (je suis a l’écoute de toute proposition ^^).


l'erreur ce produit lors de l’appelle de la fonction addStone

Code c++ :



#include "C:\\Users\\Dante\\Desktop\\projet rogrammation s6\\jeuDeGo\\include\\Display.h"
#include <irrlicht.h>


Display::Display()
{
    IrrlichtDevice* device = createDevice(EDT_OPENGL,dimension2d<u32>(640,480),32);
    IVideoDriver* driver = device->getVideoDriver ();
    ISceneManager* sceneManager =device->getSceneManager ();
    device->getCursorControl ()-> setVisible (true);
    /* GOBAN */
     IMeshSceneNode* cube =sceneManager->addCubeSceneNode(1,0,-1,vector3df(0,0,0),vector3df(0,0,0),vector3df(1,0.2,1));
     cube->setMaterialFlag(video::EMF_LIGHTING, false);
     cube->setMaterialTexture( 0, driver->getTexture("C:\\\\Users\\\\Dante\\\\Desktop\\\\projet rogrammation s6\\\\jeuDeGo\\\\9x9.png") );
     /* STONE*/
     IMeshSceneNode* sphere =sceneManager->addSphereSceneNode(0.4f,100,0,-1,vector3df(0,0.12,0),vector3df(0, 0, 0),vector3df(0.1, 0.06, 0.1));
     sphere->setMaterialFlag(video::EMF_LIGHTING, false);
     sphere->setMaterialTexture( 0, driver->getTexture("C:\\\\Users\\\\Dante\\\\Desktop\\\\projet rogrammation s6\\\\jeuDeGo\\\\stone_black.png") );
    /* CAMERA */
    sceneManager->addCameraSceneNode (0,vector3df (0,0.8,0),vector3df (0,0.1,0));
    /*gestion de l'evenement*/
    Display::CEventReceiver receiver(sphere);
    device->setEventReceiver(&receiver);

    /* RENDU */
    SColor color(                  // contient la couleur blanc
        255,                                   // composante A alpha (transparence)
        255,                                   // composante R rouge
        255,                                   // composante G verte
        255);                                  // composante B bleue
    while (device->run()) {                    // la boucle de rendu
        driver->beginScene(true, true, color); // demarre le rendu
        if(receiver.getM_isAdded())
        {
            addStone(receiver.getXref(),0.8,receiver.getYref());
            receiver.setM_isAdded(false);
        }
        receiver.majPosMesh();
        sceneManager->drawAll ();              // calcule le rendu
        driver->endScene ();                   // affiche le rendu

    }

    device->drop ();                           // libere la memoire
}
Display::CEventReceiver::CEventReceiver(irr::scene::IMeshSceneNode* Nmodele)
{
    //On pointe le mesh passe en parametre.
    m_Nmodele = Nmodele;
    //Par defaut on ne bouge pas
    m_isMoving = false;
    m_isAdded =false;

}

bool Display::CEventReceiver::OnEvent(const irr::SEvent &event){
    //On verifie que le pointeur est ok et que cest un evenemetn liée a la souris
    if(m_Nmodele != 0 && event.EventType == irr::EET_MOUSE_INPUT_EVENT)
    {


        m_isMoving = true;
        //on recupereles coordonee exacte par rapport au goban
        xref = -(event.MouseInput.Y-240)*0.002;
        yref = -(event.MouseInput.X-320)*0.002;
        if(event.MouseInput.Event== irr::EMIE_LMOUSE_PRESSED_DOWN){
            std::cout<<"xref egal a "<<xref<<std::endl;
            std::cout<<"Yref egal a "<<yref<<std::endl;
            m_isAdded=true;
        }

        //L'event est traite, on retourne true
        return true;
    }
    //Si on arrive la, c'est qu'on a pas traite l'event
    m_isMoving = false;
    return false;
}
//on ajoute une pierre au goban
void Display::addStone(float x,float y,float z){

     IMeshSceneNode* Stone =sceneManager->addSphereSceneNode(0.4f,1000,0,0,vector3df(x, 0.12, y),vector3df(0, 0, 0),vector3df(0.1, 0.06, 0.1));
     Stone->setMaterialFlag(video::EMF_LIGHTING, false);
     Stone->setMaterialTexture( 0, driver->getTexture("C:\\\\Users\\\\Dante\\\\Desktop\\\\projet rogrammation s6\\\\jeuDeGo\\\\stone_black.png") );
}

void Display::CEventReceiver::majPosMesh(){
    //On verifie que le pointeur vers le mesh est
    //ok et que la touche est enfoncee
    if(m_Nmodele != 0 && m_isMoving == true)
    {
        //On commence par recuperer la position actuelle
        irr::core::vector3df v = m_Nmodele->getPosition();
        //On y ajoute la valeur de deplacement
        v.X =xref;
        v.Z= yref;
        //On renvoie la nouvelle position
        m_Nmodele->setPosition(v);
    }
}



Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
167 invités en ligne
membre en ligne: -
RSS Feed