#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èresmile


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 rienwink


Hors ligne


OptionsLiens officielsCaractéristiquesStatistiquesCommunauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1441 sujets
11339 messages
Dernier membre inscrit: Saidov17
306 invités en ligne
membre en ligne: -
RSS Feed