Historique des modifications - Message

Message #10491

Sujet: Probleme Bouton/evenement (debutant)


Type Date Auteur Contenu
Création du message 20-05-2012 00:53:56 Dante03
Bonjour tout le monde je viens chercher un peu d'aide pour un premier projet irrlicht ^^,je suis entrain de développé un petit jeu de plateau 3D un go-moku (sorte de jeu de morpion) mon problème est que je voudrais ajouter des bouton pour "nouvelle partie ",ou "quitter" et je n'arrive simplement pas a capter les clic de ma souris sur les bouton en question (les clic sont capté quand j'ajoute une pierre sur le plateau mais pour le bouton rien a y faire sad ) j'ai passez plusieurs heurs a essayer ce que je trouve sur les sujets et tuto existant mais rien n y fait je poste une partie de mon code en espérant un peu d'aide (une méthode) pour que mes bouton soi enfin pris en compte .
ps:j'ai ajouter un Screenshots de mon programme .

Code c++ :

 

Display::Display()
{

     game=new Game();
     round =0;
     device = createDevice(EDT_OPENGL,dimension2d<u32>(640,480),32);
     driver = device->getVideoDriver ();
     sceneManager =device->getSceneManager ();
     device->getCursorControl ()-> setVisible (false);

     irr::gui::IGUIEnvironment *gui = sceneManager->getGUIEnvironment();
  
     /*les bouton qui posent probleme */
      newPGame = gui->addButton(irr::core::rect<irr::s32>(10,10,120,50),0, 1, L"New Game(Player vs Player)");
      newIaGame = gui->addButton(irr::core::rect<irr::s32>(10,60,120,100),0, 2, L"New Game(Player vs IA)");
      leave = gui->addButton(irr::core::rect<irr::s32>(10,110,120,150),0, 3, L"Quit");
    /* GOBAN */
     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\\\\img\\\\13x13.png") );
     /* STONE*/
     sphere =sceneManager->addSphereSceneNode(0.4f,100,0,-1,vector3df(0,0.12,0),vector3df(0, 0, 0),vector3df(0.07, 0.04, 0.07));
     sphere->setMaterialFlag(video::EMF_LIGHTING, false);
     sphere->setMaterialTexture( 0, driver->getTexture("C:\\\\Users\\\\Dante\\\\Desktop\\\\projet rogrammation s6\\\\jeuDeGo\\\\img\\\\stone_black.png") );
    /* CAMERA */
    sceneManager->addCameraSceneNode (0,vector3df (-0.6,0.8,0),vector3df (0,0.1,0));
    /*gestion de l'evenement*/
    receiver = new CEventReceiver(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())
        {
                receiver->setM_isAdded(false);
                addStone(receiver->getnewX(),0.8,receiver->getnewY());
        }
        receiver->majPosMesh();

        sceneManager->drawAll ();
        gui->drawAll();             // calcule le rendu
        driver->endScene ();                   // affiche le rendu
    }

    device->drop ();                           // libere la memoire
}


Display::CEventReceiver::CEventReceiver(irr::scene::IMeshSceneNode* sphere)
{
    //On pointe le mesh passe en parametre.
    m_Nmodele =sphere;
    //Par defaut on ne bouge pas
    m_isMoving = false;
    m_isAdded =false;

}

bool Display::CEventReceiver::OnEvent(const irr::SEvent &event){
    if(event.EventType == irr::EET_GUI_EVENT)cout<<"evenement declencher"<<endl;
    //else cout<<"aucun evenement gui declencher";
    //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 && setCorrectPosition( xref,yref)){

            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(int x,float y,int z){
    if(isCaseFree(x,z)){
         IMeshSceneNode* Stone =sceneManager->addSphereSceneNode(0.4f,1000,0,0,vector3df(x*0.076, 0.12, z*0.076),vector3df(0, 0, 0),vector3df(0.07, 0.04, 0.07));
         Stone->setMaterialFlag(video::EMF_LIGHTING, false);
         int value=Game::NOBODY;
         if(round%2==0){
            Stone->setMaterialTexture( 0, driver->getTexture("C:\\\\Users\\\\Dante\\\\Desktop\\\\projet rogrammation s6\\\\jeuDeGo\\\\img\\\\stone_black.png") );
            value=Game::BLACK;
            game->setBoardValue(abs(x-6),abs(z-6),value);

         }
         else{
             Stone->setMaterialTexture( 0, driver->getTexture("C:\\\\Users\\\\Dante\\\\Desktop\\\\projet rogrammation s6\\\\jeuDeGo\\\\img\\\\stone_white.png") );
             value=Game::WHITE;
             game->setBoardValue(abs(x-6),abs(z-6),value);
         }
         stones[round]=Stone;
         round++;
         if(game->getWinner()!=Game::NOBODY){
            cout<<"il ya un vainquer la partie est terminer "<<endl;
            game->setGameFinish(true);//!je voudrais pouvoir tester le choix de l'utilisateur une fois la partie fini 
            if(newPGame->isPressed()){//pour ca j'ai besoin de savoir comment savoir quand mon bouton a etai cliqué !
            clear();
            }
         }
    }
}


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
111 invités en ligne
membre en ligne: -
RSS Feed