Historique des modifications - Message

Message #10766

Sujet: Bouton pour un nouveau personnage


Type Date Auteur Contenu
Création du message 10-09-2012 08:51:26 Lagiol
Bonjour, j'essaye depuis quelques temps de faire le menu principal de mon jeu. A savoir, un simple bouton "Nouveau personnage" qui aurait pour but, lorsqu'on clique dessus, d'ajouter un cube et de targeter la caméra dessus. Ton semble fonctionner, lorsque je lance le programme, je vois mes deux boutons "Entrer dans le jeu" (inutile pour l'instant) et "Nouveau personnage". Aucun problème jusque là, sauf lorsque je décide de passer la souris au-dessus de ces boutons, le programme plante. Je vous envoie mon code au passage.

Code c++ :


#include <irr/Irrlicht.h>
#include <iostream>

using namespace std;
using namespace irr;
using namespace scene;
using namespace video;
using namespace core;
using namespace gui;
using namespace io;


#ifdef _MSC_VER
#pragma comment(lib, "Irrlicht.lib")
#endif

struct SAppContext
{
    IrrlichtDevice *device;
    s32 counter;
    ISceneManager *smgr;
    ICameraSceneNode *camera;
};
enum
{
        idBoutonEntrer,
        idBoutonNew
};

class MyEventReceiver : public IEventReceiver
{
public:
    MyEventReceiver(SAppContext & context) : Context(context) { }
    virtual bool OnEvent(const SEvent &event)
    {
        if(event.EventType == irr::EET_GUI_EVENT)
        {
            s32 id = event.GUIEvent.Caller->getID();
            IGUIEnvironment *gui = Context.device->getGUIEnvironment();
            switch(event.GUIEvent.EventType)
            {
                case EGET_BUTTON_CLICKED:
                    switch(id)
                    {
                        case idBoutonNew:{
                            IMeshSceneNode *cube = Context.smgr->addCubeSceneNode(10);
                            Context.camera->setTarget(cube->getPosition());
                        }
                        return true;
                        default:
                            return false;
                    }
                    break;
            default:
                break;

            }
        }
        return false;
    }

    /*void checkBoutons(ISceneManager* smgr, ICameraSceneNode* camera)
    {
        if(m_bouton_new_clicked == true)
        {
            IMeshSceneNode *cube = smgr->addCubeSceneNode(10);
            camera->setTarget(cube->getPosition());
        }
    }*/
protected:
    SAppContext & Context;
    /*ISceneManager* m_smgr;
    ICameraSceneNode* m_camera;
    bool m_bouton_entrer_clicked;
    bool m_bouton_new_clicked;*/
};


int main()
{

    IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d<u32>(800,600), 32, false, false, false);
    IVideoDriver *driver = device->getVideoDriver();
    ISceneManager *smgr = device->getSceneManager();
    ICursorControl *cursor = device->getCursorControl();
    IGUIEnvironment *gui = device->getGUIEnvironment();
    IMeshManipulator *manipulator = smgr->getMeshManipulator();

    cursor->setVisible(false);

    device->setWindowCaption(L"Secret of Ragnor");

    driver->setFog(
        SColor(0,255,255,255),
        EFT_FOG_LINEAR,
        50.0f,
        4000.0f,
        0.01f,
        true,
        true);

    smgr->setShadowColor(SColor(150,0,0,0));

    ITexture * cursorImage = driver->getTexture("textures/curseur3.png");
    dimension2d<u32> taille = cursorImage->getSize();
    position2d<s32> position0;
    position0.X = 0;
    position0.Y = 0;
    position2d<s32> position1;
    position1.X = taille.Width;
    position1.Y = taille.Height;
    rect<s32> rectangle1;
    rectangle1.UpperLeftCorner = position0;
    rectangle1.LowerRightCorner = position1;



    ICameraSceneNode * camera = smgr->addCameraSceneNode();

    IAnimatedMeshSceneNode *creation_scene_floor = smgr->addAnimatedMeshSceneNode(smgr->getMesh("meshes/creation_scene_floor.3ds"), 0, -1, vector3df(0,0,0), vector3df(0,0,0), vector3df(30.0f,30.0f,30.0f));
    creation_scene_floor->setMaterialFlag(EMF_LIGHTING, false);
    creation_scene_floor->setMaterialTexture(0, driver->getTexture("textures/creation_scene_floor.png"));
    creation_scene_floor->getMesh()->setHardwareMappingHint(EHM_STATIC);
    creation_scene_floor->setMaterialFlag(EMF_FOG_ENABLE, true);
    creation_scene_floor->addShadowVolumeSceneNode();
    creation_scene_floor->setVisible(true);
    manipulator->makePlanarTextureMapping(creation_scene_floor->getMesh(), 0.4f);

    camera->setPosition(creation_scene_floor->getPosition() + vector3df(0,100,0));
    camera->setTarget(vector3df(-180,-20,0));

    IGUIButton *bouton_entrer_dans_le_jeu = gui->addButton(rect<s32>(100+175,80+400,200+175,120+400), 0, idBoutonEntrer, L"Entrer dans le jeu");
    IGUIButton *bouton_nouveau_perso = gui->addButton(rect<s32>(100+300,80+400,200+300,120+400), 0, idBoutonNew, L"Nouveau personnage");

    SAppContext context;
    MyEventReceiver receiver(context);
    device->setEventReceiver(&receiver);

    //Skydome
    driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false);
    scene::ISceneNode* skydome = smgr->addSkyDomeSceneNode(driver->getTexture("textures/skydome.png"), 16, 8, 0.95f, 2.0f);
    driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, true);

    while(device->run())
    {
        driver->beginScene(false, false, SColor(255,150,150,150));


        smgr->drawAll();
        gui->drawAll();

        driver->draw2DImage(cursorImage, cursor->getPosition(), rectangle1, 0, SColor(255,255,255,255));
        s32 posx = camera->getPosition().X;
        s32 posy = camera->getPosition().Y;
        s32 posz = camera->getPosition().Z;
                int fps = driver->getFPS();
                stringw str = L"Secret of Ragnor [";
                str += driver->getName();
                str += "] FPS : ";
                str += fps;
                str += " | X : ";
                str += posx;
                str += " | Y : ";
                str += posy;
                str += " | Z : ";
                str += posz;
                str += " |";

                device->setWindowCaption(str.c_str());
        //receiver.checkBoutons(smgr, camera);


        driver->endScene();
    }

    device->drop();
    return 0;
}

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