Retourner au sujet

  Message initiale datant du 27 August 2010 à 11h 26mn 27s

Bonjour, j'ai un perso qui se déplace dans la map BSP donnée avec Irrlicht. J'ai attaché un "ISceneNodeAnimatorCollisionResponse" a ce perso et les collisions marchent parfaitement. Je voudrais modifier un des paramètres de ce collision animator pendant l'exécution, mais lorsque je modifie un paramètre dans la boucle de rendu(que ce soit directement dans la boucle ou par une fonctions appelée dans la boucle), le collision animator ne marche plus du tout et je n'ai donc plus aucune collision.

J'aimerais donc savoir si il y a un moyen de changer un paramètres d'un collision animator au cours du programme. Merci.

Voici mon code si vous voyez une erreur de ma part:
La création du collision animator:

Code c++ :


//Création d'un collision animator pour le personnage
    scene::ISceneNodeAnimatorCollisionResponse* anim;
    if (selector)
    {
        anim = smgr->createCollisionResponseAnimator(selector, playerNode,
                                                    core::vector3df(19, 40.0f, 9.25f),
                                                    core::vector3df(0, -10, 0),
                                                    core::vector3df(0, 18, -1));
        playerNode->addAnimator(anim);
    }



La boucle de rendu, par exemple ici je change la gravité de l'animator avec anim->setGravity, après cela le collision animator ne marche plus du tout.

Code c++ :


//Boucle de rendu
    while(device->run())
    {
        if(device->isWindowActive())
        {
            driver->beginScene(true, true, 0);
            smgr->drawAll();
            gui->drawAll();

            anim->setGravity(core::vector3df(0, -10, 0)); // Modification de la gravité

            time = (f32)device->getTimer()->getTime();
           
            eventReceiver.updateNodePositons(time - lastTime);
            eventReceiver.replaceCamera();
           
            if(time - lastTime < MIN_FRAME_TIME)
            {
                device->sleep((u32)(MIN_FRAME_TIME - (time - lastTime)));
            }
            else
            {
                lastTime = time;
            }

            driver->endScene();           
        }
        else
        {
            device->sleep(500);
        }
    }



J'ai essayé de mettre la modification avant le beginScene, après le beginScene, et après le endScene, mais toujours le même résultat. Par contre si je le fait avant la boucle de rendu, la gravité est changé normalement et le collision animator marche toujours parfaitement.



Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
20 invités en ligne
Aucun membre connecté
RSS Feed