Historique des modifications - Message

Message #2392

Sujet: Comment implementer un "trigger"?


Type Date Auteur Contenu
Création du message 13-06-2007 10:38:43 cryo25
Bonjour a tous,

Je voudrai savoir comment faire pour ouvrir une porte, juste pour un test!
Ex: j'ai un joueur (camera en mode FPS), un monde modéliser en .X et j'ai ajouter une porte (en .X). Lorsque mon joueur s'approche de cette porte, j'aimerai qu'elle s'ouvre soit juste en s'approchant de celle-ci, soit en appuyant sur une touche.

J'ai deja essayer avec GetDistanceFrom, mais l'essai n'est pas tres concluant!!
Voila mon code actuel:

ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS(0, 100, 150, -1, keyMap, 8);
    camera->setPosition(core::vector3df(100,150,100));

    core::vector3df camPos = camera->getAbsolutePosition();

///*************************************************************************************************
    IAnimatedMesh* mesh1 = smgr->getMesh("JUJU2/murs.x");
	IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh1 );
    node->setMaterialFlag(video::EMF_LIGHTING, true);
    //node->getMaterial(0).AmbientColor = SColor(255,0,0,0);
    node->setScale(core::vector3df(10.0f,1.0f,10.0f));

    scene::ITriangleSelector* selector = smgr->createOctTreeTriangleSelector(mesh1->getMesh(0),node);
            node->setTriangleSelector(selector);
            selector->drop();
///**************************************************************************************************
IAnimatedMesh* mesh2 = smgr->getMesh("JUJU2/porte.x");
	IAnimatedMeshSceneNode* node2 = smgr->addAnimatedMeshSceneNode( mesh2 );
    node2->setMaterialFlag(video::EMF_LIGHTING, true);
    node2->setDebugDataVisible(true);
    node2->setScale(core::vector3df(10.0f,1.0f,10.0f));


ITriangleSelector* doorSelector = smgr->createTriangleSelectorFromBoundingBox(node2);


scene::IMetaTriangleSelector* metaSelector = smgr->createMetaTriangleSelector();
metaSelector->addTriangleSelector(doorSelector);
metaSelector->addTriangleSelector(selector);



        core::vector3df start = node2->getPosition();
        core::vector3df end = start;


scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
	metaSelector, camera, core::vector3df(10,50,10),
	core::vector3df(0,-10.0f,0),//-200
	core::vector3df(0,60,0), 0.00005f);
camera->addAnimator(anim);
anim->drop();


bool ouvert = false;//Booleen pour l'ouverture, fermeture
if (ouvert = true)
      {
        core::vector3df end = start;
        end.Y = end.Y + 200;
        ISceneNodeAnimator* anim1 = smgr->createFlyStraightAnimator(start, end, 3000, false);
        node2->addAnimator(anim1);
        anim1->drop();
        //ouvert = false;

      }
if( ouvert = false)
      {

          //core::vector3df end = start;
        end.Y = end.Y - 200;
        ISceneNodeAnimator* anim1 = smgr->createFlyStraightAnimator(start, end, 3000, false);
        node2->addAnimator(anim1);
        anim1->drop();
        ouvert = true;

      }

ISceneNode* node1 = 0;
node1 = smgr->addLightSceneNode(0, core::vector3df(0,150,0),
		video::SColorf(1.0f, 0.6f, 0.7f, 1.0f), 800.0f);

IGUIStaticText* fpstext =
		env->addStaticText(L"", core::rect<s32>(10,150,200,200), false, true, 0, -1, true);


int lastFPS = -1;
	while(device->run())
	{


		driver->beginScene(true, true, SColor(0,20,20,20));

		smgr->drawAll();
		env->drawAll();
		
        if( node2->getPosition().getDistanceFrom(camera->getPosition()) > 120)
        ouvert = true;
        else if( node2->getPosition().getDistanceFrom(camera->getPosition()) < 120)
        ouvert = false;


		driver->endScene();

Ma porte est soit toujours ouverte, soit fermé......

Merci de votre aide!!!!

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