#1 

20-10-2007 22:59:59

bestben
Membres
Date d'inscription:
Messages: 133
IP: 84.98.115.179
Courriel

Bonjours ,
Bon mon titre n'est pas très explicite mais je ne savais pas quoi écrire,
donc voici mon prob : quand je compile tous ce charge bien mais arrivé a l'ouverture de la fenétre sa plante, j'ai réussi à découvrir d'où vient l'erreur

gui::IGUIButton *bouton = gui->addButton(
core::rect<s32>(220,15,300,30), 0, -1, message);

Merci d'avance


Hors ligne


#2 

21-10-2007 07:58:30

Perceval
Membres
Avatar de Perceval
Date d'inscription:
Messages: 105
IP: 90.31.229.57
Courriel

Y a pas assez d'infos pour qu'on puisse t'aider : il faut que tu nous montre plus de code.
A mon avis, t'as du oublier d'initialiser un pointeur, le gui ou le message sans doute, mais je peux pas en être sur sans le code. smile


Hors ligne


#3 

21-10-2007 08:01:59

bestben
Membres
Date d'inscription:
Messages: 133
IP: 84.98.115.179
Courriel

ok voici mon code

#include <IRR/irrlicht.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <MYSQL/mysql.h>
#include <string>

using namespace std;
using namespace irr;
//-------------------------------------------------------------------------------


//---------------------------------------------------------------------------------
int main(void)
{
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//Déclaration du pointeur de structure de type MYSQL


    MYSQL mysql;
        //Initialisation de MySQL
        mysql_init(&mysql);
        //Options de connexion
        mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option");

        //Si la connexion réussie...
        if(mysql_real_connect(&mysql,"serveur-de-la-chaussee.no-ip.info","bestben","19920512","mmo",0,NULL,0))
        {
            //Requête qui sélectionne tout dans ma table scores
            mysql_query(&mysql, "SELECT * FROM perso");


            //Déclaration des pointeurs de structure
            MYSQL_RES *result = NULL;
            MYSQL_ROW row = NULL;

            unsigned int i = 0;
            unsigned int num_champs = 0;

            //On met le jeu de résultat dans le pointeur result
            result = mysql_store_result(&mysql);

            //On choisie une ligne
            mysql_data_seek(result, 1);

            //On récupère le nombre de champs
            num_champs = mysql_num_fields(result);

            //on stock les valeurs de la ligne choisie
            row = mysql_fetch_row(result);

                //On déclare un pointeur long non signé pour y stocker la taille des valeurs
                unsigned long *lengths;

                //On stocke cette taille dans le pointeur
                lengths = mysql_fetch_lengths(result);

                //On fait une boucle pour avoir la valeur de chaque champs
               for(i = 0; i < num_champs; i++)
               {
                   //On ecrit toutes les valeurs
                   printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
               }

            //Libération du jeu de résultat
            mysql_free_result(result);

            //Fermeture de MySQL
            mysql_close(&mysql);
         printf("\
");
        }
        else  //Sinon ...
        {
            printf("Une erreur s'est produite lors de la connexion à la BDD!");
        }




//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------

    IrrlichtDevice* device = createDevice(video::EDT_OPENGL, core::dimension2d<s32>(640, 480), 16,false,false,false);
    video::IVideoDriver* driver = device->getVideoDriver ();
    scene::ISceneManager* scenegraph = device->getSceneManager ();
    scene::ISceneManager* smgr = device->getSceneManager();
    //On récupère un pointeur vers la GUI.
    gui::IGUIEnvironment *gui = scenegraph->getGUIEnvironment();
//On rend invisible le curseur
    device->getCursorControl ()-> setVisible (false);

SKeyMap keyMap[5];
//avancer
keyMap[0].Action = irr::EKA_MOVE_FORWARD;
keyMap[0].KeyCode = irr::KEY_KEY_Z;
//reculer
keyMap[1].Action = irr::EKA_MOVE_BACKWARD;
keyMap[1].KeyCode = irr::KEY_KEY_S;
//a gauche
keyMap[2].Action = irr::EKA_STRAFE_LEFT;
keyMap[2].KeyCode = irr::KEY_KEY_Q;
//a droite
keyMap[3].Action = irr::EKA_STRAFE_RIGHT;
keyMap[3].KeyCode = irr::KEY_KEY_D;
//saut
keyMap[4].Action = irr::EKA_JUMP_UP;
keyMap[4].KeyCode = irr::KEY_SPACE;

 scene::IAnimatedMesh *room = scenegraph->getMesh("essai.3ds");
    if (room == 0)
    {
        std::cout << "problème de chargement de la salle" << std::endl;
        return 1;
    }
    scene::IMeshSceneNode *Nroom = scenegraph->addMeshSceneNode(room->getMesh(0));
    Nroom->setPosition(core::vector3df(0,0,0));
//On applique une texture à la salle.
    scenegraph->getMeshManipulator()->makePlanarTextureMapping(
        room->getMesh(0), 0.004f);
    Nroom->setMaterialTexture( 0, driver->getTexture("rockwall.bmp") );


scene::ITriangleSelector* selector = 0;

//et tu lui associ le node :
selector = smgr->createOctTreeTriangleSelector(room->getMesh(0), Nroom, 128);
Nroom->setTriangleSelector(selector);
selector->drop();


//tu cree la cam :
scene::ICameraSceneNode *camera = scenegraph->addCameraSceneNodeFPS (0, 500.0f, 300.0f, 0, keyMap, 5, false);
camera->setPosition(core::vector3df(0,15,0));

//puis tu lui associ la collision avec comme surface "selector" :
scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
selector, camera, core::vector3df(50,50,50),
core::vector3df(0,-1,0),
core::vector3df(0,6,0));
camera->addAnimator(anim);
anim->drop();

    //lumiere
    scene::ILightSceneNode* lum1 = scenegraph->addLightSceneNode(Nroom, core::vector3df(0,1,0),video::SColorf(0.9f, 0.9f, 1.0f, 1.0f), 100.0f);
    scene::ILightSceneNode* lum2 = scenegraph->addLightSceneNode(Nroom, core::vector3df(10,1,0),video::SColorf(0.9f, 0.9f, 1.0f, 1.0f), 100.0f);
    scene::ILightSceneNode* lum3 = scenegraph->addLightSceneNode(Nroom, core::vector3df(20,1,0),video::SColorf(0.9f, 0.9f, 1.0f, 1.0f), 100.0f);
    scene::ILightSceneNode* lum4 = scenegraph->addLightSceneNode(camera, core::vector3df(0,0,2),video::SColorf(0.9f, 0.9f, 1.0f, 1.0f), 200.0f);

//arme
    scene::IAnimatedMesh* arme = scenegraph->getMesh("armeV2.obj");
    scene::IAnimatedMeshSceneNode* Narme = scenegraph->addAnimatedMeshSceneNode(arme);

   //position arme
    Narme->setParent(camera);
    Narme->setPosition(core::vector3df(2,-3,5)); // relatif à la position de la caméra

    //On modifie les propriétés de l'arme
    Narme->setMaterialFlag(video::EMF_LIGHTING, true);
    Narme->setMaterialFlag(video::EMF_FOG_ENABLE, true);
    Narme->getMaterial(0).EmissiveColor = video::SColor(255,0,0,0);
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
    //On affecte une nouvelle police par défaut.
    gui->getSkin()->setFont(gui->getFont("fontLucida.png"));


    //On crée une chaîne de caractères unicode pour pouvoir y mettre des accents.
   wchar_t* message(L"Le probleme est resolu");

    //On ajoute un joli texte, avec bordure, fond et retour à la ligne automatique.
    gui::IGUIStaticText *texte = gui->addStaticText(message,
         core::rect<s32>(20,30,300,140), true, true, 0, -1, true);

    //La zone de texte, dans le coin supérieur gauche.
    gui::IGUIEditBox *editBox = gui->addEditBox(message,
          core::rect<s32>(20,15,200,30));

    //On réutilise la même chaîne de caractères pour le texte du bouton.
    swprintf(message, L"Mise a jour", 224);

    //On rajoute le bouton de mise à jour dans le coin supérieur droit.
    gui::IGUIButton *bouton = gui->addButton(
         core::rect<s32>(220,15,300,30), 0, -1, message);
    //On associe des images de fond aux états du bouton.
    bouton->setImage(driver->getTexture("vert.bmp"));
    bouton->setPressedImage(driver->getTexture("rouge.bmp"));

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
       driver->setFog(video::SColor(0,215,215,224), false, 2.0,200.0,0.01, true);
    //La boucle de rendu
    while (device->run())
    {
        driver->beginScene(true,true,video::SColor(0,200,200,200));
        scenegraph->drawAll ();
        gui->drawAll();
        driver->endScene ();
       //Si le bouton est enfoncé, le texte de la zone de texte
        //devient le nouveau texte du texte satique.
        if (bouton->isPressed() == true)
            texte->setText(editBox->getText());

}

    device->drop ();

    return 0;
}

Bon je sait le code est pas très propre :p
Et l'erreur est de type fenétre windows envoyer ne pas envoyer


Hors ligne


#4 

21-10-2007 08:18:01

Perceval
Membres
Avatar de Perceval
Date d'inscription:
Messages: 105
IP: 90.31.229.57
Courriel

Je sais pas si ton erreur vient de là ou pas, mais çà :

wchar_t* message(L"Le probleme est resolu");

c'est bien quand on fait du C, mais je trouve pas çà très bien pour du C++.
Il y a une classe dans Irrlicht pour gérer les chaînes de caractères (strinw), certainement plus simple à utiliser que swprintf.


Hors ligne


#5 

21-10-2007 08:23:58

bestben
Membres
Date d'inscription:
Messages: 133
IP: 84.98.115.179
Courriel

OUi j'avais a l'origine essayer avec stringw Mais j'était tombé sur ça:

node.cpp:177: error: no matching function for call to `irr::gui::IGUIEnvironment::addStaticText(irr::core::stringw&, irr::core::rect<irr::s32>, bool, bool, int, int, bool)'
C:/Program Files/CodeBlocks/include/IRR/IGUIEnvironment.h:282: note: candidates are: virtual irr::gui::IGUIStaticText* irr::gui::IGUIEnvironment::addStaticText(const wchar_t*, const irr::core::rect<irr::s32>&, bool, bool, irr::gui::IGUIElement*, irr::s32, bool)
node.cpp:181: error: no matching function for call to `irr::gui::IGUIEnvironment::addEditBox(irr::core::stringw&, irr::core::rect<irr::s32>)'
C:/Program Files/CodeBlocks/include/IRR/IGUIEnvironment.h:298: note: candidates are: virtual irr::gui::IGUIEditBox* irr::gui::IGUIEnvironment::addEditBox(const wchar_t*, const irr::core::rect<irr::s32>&, bool, irr::gui::IGUIElement*, irr::s32)
node.cpp:184: error: cannot convert `irr::core::stringw' to `wchar_t*' for argument `1' to `int swprintf(wchar_t*, const wchar_t*, ...)'
node.cpp:188: error: no matching function for call to `irr::gui::IGUIEnvironment::addButton(irr::core::rect<irr::s32>, int, int, irr::core::stringw&)'
C:/Program Files/CodeBlocks/include/IRR/IGUIEnvironment.h:165: note: candidates are: virtual irr::gui::IGUIButton* irr::gui::IGUIEnvironment::addButton(const irr::core::rect<irr::s32>&, irr::gui::IGUIElement*, irr::s32, const wchar_t*, const wchar_t*)


Hors ligne


#6 

21-10-2007 08:30:36

Perceval
Membres
Avatar de Perceval
Date d'inscription:
Messages: 105
IP: 90.31.229.57
Courriel

Je pense que tu passais directement le stringw dans tes fonctions : en fait, il faut appeler le méthode c_str() de ton objet stringw, qui rend une chaîne de caractère smile


Hors ligne


#7 

21-10-2007 08:34:19

bestben
Membres
Date d'inscription:
Messages: 133
IP: 84.98.115.179
Courriel

J'ai pas trop compris ta dernière phrase :
appeler la méthode c_str() de ton objet stringw


Hors ligne


#8 

21-10-2007 08:40:11

Perceval
Membres
Avatar de Perceval
Date d'inscription:
Messages: 105
IP: 90.31.229.57
Courriel

Je suppose que t'as déclaré un objet stringw quelque part dans ton code :

stringw str = L"Ceci est un objet stringw";

Quand je parles d'appeler sa méthode c_str(), je veux dire écrire çà :
str.c_str();

qui va te rendre un wchar_t* smile


Hors ligne


#9 

21-10-2007 08:53:51

bestben
Membres
Date d'inscription:
Messages: 133
IP: 84.98.115.179
Courriel

Si je suis ton exemple faut que je mette

core::stringw message = L"Ceci est un objet stringw";
message.c_str();

???


Hors ligne


#10 

21-10-2007 09:19:44

Perceval
Membres
Avatar de Perceval
Date d'inscription:
Messages: 105
IP: 90.31.229.57
Courriel

Non, en fait je vois çà smile :

// tu créés  un objet stringw ici
core::stringw message = L"Ceci est un objet stringw";

// dans tes appels, tu changes message par message.c_str()
gui::IGUIStaticText *texte = gui->addStaticText(message.c_str(),
         core::rect<s32>(20,30,300,140), true, true, 0, -1, true);

// après, si tu veux changer de messages tu fais çà
message = L"nouveau message";

// de cette façon, tu es sur que la mémoire allouée à ton ancienne chaîne est libérée,
// ce dont je ne suis pas certain avec swprintf


Hors ligne


#11 

21-10-2007 09:36:15

bestben
Membres
Date d'inscription:
Messages: 133
IP: 84.98.115.179
Courriel

Ok ça c'est bon mais arriver à cette ligne

    swprintf(message.c_str(), L"Mise a jour", 224);

un message d'erreur s'affiche
node.cpp:183: error: invalid conversion from `const wchar_t*' to `wchar_t*'
node.cpp:183: error:   initializing argument 1 of `int swprintf(wchar_t*, const wchar_t*, ...)'

Tu m'a dit de passer par stringw a la place de swprintf mais comment on fait


Hors ligne


#12 

21-10-2007 09:40:13

Perceval
Membres
Avatar de Perceval
Date d'inscription:
Messages: 105
IP: 90.31.229.57
Courriel

T'as plus besoin des swprintf, c'est pour çà que je te propose d'utiliser la classe stringw, tu dois les remplacer par message = L"ta nouvelle chaîne" smile


Hors ligne


#13 

21-10-2007 09:42:11

bestben
Membres
Date d'inscription:
Messages: 133
IP: 84.98.115.179
Courriel

OK merci ça marche
Un grand MERCI pour toute tes réponse rapide


Hors ligne


#14 

21-10-2007 09:44:51

Perceval
Membres
Avatar de Perceval
Date d'inscription:
Messages: 105
IP: 90.31.229.57
Courriel

De rien wink


Hors ligne


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