#0 

27-08-2010 11:26:27

benjani13
Petit nouveau
Lieu: 92
Date d'inscription: 25-01-2010
Messages: 9

Bonjour, j'ai un perso qui se déplace dans la map BSP donnée avec Irrlicht. J'ai attaché un "ISceneNodeAnimatorCollisionResponse" à 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 fonction 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 s'il y a un moyen de changer un paramètre 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 fais avant la boucle de rendu, la gravité est changée normalement et le collision animator marche toujours parfaitement.

Dernière modification par benjani13 (27-08-2010 11:31:43)

Hors ligne


#1 

19-09-2010 12:00:47

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 904
Corrections: 2
Site web

tu peut essayer repasser l'animator au scene node après l'avoir modifier ...
mais franchement j'en sais rien je ne les utilise pas !

les moteurs physique c'est nettement mieux

Dernière modification par Magun (19-09-2010 12:09:47)

Hors ligne


#2 

19-09-2010 12:21:34

benjani13
Petit nouveau
Lieu: 92
Date d'inscription: 25-01-2010
Messages: 9

Non sa ne marche pas...
Je verrais plus tard pour les moteurs physique, pour l'instant je fais un prototype donc les collisions d'Irrlicht me suffisent.

Hors ligne


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
Analysé par
880 membres
1424 sujets
11113 messages
Dernier membre inscrit: mandrifidy
42 invités en ligne
Aucun membre connecté
RSS Feed