Historique des modifications - Message

Message #8623

Sujet: Comment modifier les paramètres d'un collision animator?


Type Date Auteur Contenu
Correction acceptée 28-08-2010 09:09:53 Zorian
Texte original:
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.
Correction proposée:
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 27-08-2010 09:31:43 benjani13
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.
Création du message 27-08-2010 09:26:27 benjani13
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.

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