Historique des modifications - Message

Message #4140

Sujet: Comment modifier un IAnimatedMeshSceneNode à partir d'un ISceneNode ?


Type Date Auteur Contenu
Création du message 31-05-2008 09:31:45 nikska
bonjour,
Alors à partir de l'exemple 7 sur les collisions, j'ai fait quelque petite modification :
lorsque je clique sur un objet, je récupère le IsceneNode seulement j'aimerai pouvoir accéder au méthodes de l'IAnimatedMeshSceneNode.
J'ai essayé plusieurs choses, mais malheureusement ça plante.

voici la code :

#include <irrlicht.h>
#include <iostream>


using namespace irr;

class MyEventReceiver : public irr::IEventReceiver
{

    public:
    MyEventReceiver( scene::ISceneManager* smgr, gui::ICursorControl* curseur)
    {
        //node=0;

        selectedSceneNode = 0;
        lastSelectedSceneNode = 0;
        m_smgr = smgr;
        m_curseur = curseur;

    }

    bool OnEvent(const SEvent& event)
    {

        if (event.EventType == EET_MOUSE_INPUT_EVENT && event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP)
        {
            core::line3d<f32> line;


            line.start = m_smgr->getActiveCamera()->getPosition();

            line.end = line.start + (m_smgr->getActiveCamera()->getTarget() - line.start).normalize() * 1000.0f;

            core::vector3df intersection;
            core::triangle3df tri;

            selectedSceneNode = m_smgr->getSceneCollisionManager()->getSceneNodeFromScreenCoordinatesBB(m_curseur->getPosition());


            if (lastSelectedSceneNode){
                lastSelectedSceneNode->setMaterialFlag(video::EMF_LIGHTING, true);
            }


            if (selectedSceneNode){
                selectedSceneNode->setMaterialFlag(video::EMF_LIGHTING, false);
                scene::IAnimatedMeshSceneNode* node=0;

                selectedSceneNode->addChild(node);   //essai1 avec addchild
                //node->setParent(selectedSceneNode);  //essai2 avec set parent
                std::cout<<"modifie animaion speed :"<<std::endl;
                node->setAnimationSpeed(5); //fait planter l'application
                std::cout<<"fin modifie :"<<std::endl;

                lastSelectedSceneNode = selectedSceneNode;

                /**
                Ici je voudrai acceder au methodes de l'AnimatedMeshSceneNode !!
                Par exemple : utiliser setAnimationSpeed(5);
                    ou  récupéré le nom du personnage pour une classe qui herite de AnimatedMeshSceneNode
                **/

            }
        }
    }

    protected:
        //scene::IAnimatedMeshSceneNode* node;
        scene::ISceneNode* selectedSceneNode;
        scene::ISceneNode* lastSelectedSceneNode;
        scene::ISceneManager* m_smgr;
        gui::ICursorControl* m_curseur;
};



int main()
{
    // create device

    IrrlichtDevice *device =
        createDevice(video::EDT_OPENGL, core::dimension2d<s32>(640, 480), 32, false);
    irr::gui::ICursorControl* monCurseur = device->getCursorControl();


    video::IVideoDriver* driver = device->getVideoDriver();
    scene::ISceneManager* smgr = device->getSceneManager();

    scene::ICameraSceneNode* camera = smgr->addCameraSceneNodeMaya(0);
    camera->setPosition(core::vector3df(0, 0, 0));
    camera->setTarget(core::vector3df(-70,0,-20));


    video::SMaterial material;
    material.setTexture(0, driver->getTexture("../../media/faerie2.bmp"));
    material.Lighting = true;

    scene::IAnimatedMeshSceneNode* node = 0;
    scene::IAnimatedMesh* faerie = smgr->getMesh("../../media/faerie.md2");

    if (faerie)
    {
        scene::IAnimatedMeshSceneNode* node1 = smgr->addAnimatedMeshSceneNode(faerie);
        node1->setPosition(core::vector3df(-70,0,0));
        node1->setMD2Animation(scene::EMAT_RUN);
        node1->getMaterial(0) = material;
        std::cout<<(&node)<<std::endl;

        scene::IAnimatedMeshSceneNode* node2 = smgr->addAnimatedMeshSceneNode(faerie);
        node2->setPosition(core::vector3df(-70,0,-30));
        node2->setMD2Animation(scene::EMAT_SALUTE);
        node2->getMaterial(0) = material;
        std::cout<<(&node)<<std::endl;

        scene::IAnimatedMeshSceneNode* node3 = smgr->addAnimatedMeshSceneNode(faerie);
        node3->setPosition(core::vector3df(-70,0,-60));
        node3->setMD2Animation(scene::EMAT_JUMP);
        node3->getMaterial(0) = material;

    }

    material.setTexture(0, 0);
    material.Lighting = false;


    smgr->addLightSceneNode(0, core::vector3df(-60,100,400),
                            video::SColorf(1.0f,1.0f,1.0f,1.0f),
                            600.0f);


    MyEventReceiver receiver(smgr, monCurseur);
    device->setEventReceiver(&receiver);

    while (device->run())
        if (device->isWindowActive())
        {
            driver->beginScene(true, true, 0);

            smgr->drawAll();

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