Historique des modifications - Message

Message #11300

Sujet: Problème de déplacement et de collision


TypeDateAuteurContenu
Création du message27-05-2013 20:54:05Super-Vlan
J'ai réglé mon problème! Celui-ci provenait de la création des cubes. En effet, chacun étaient un mesh unique auquel j'assignais le même animator légèrement modifié ce qui m'empêchais de le réutiliser dans une autre fonction.

Mon ancien code de création des cubes:

Code c++ :



Monstres::Monstres(irr::scene::ISceneManager *sceneManager, irr::video::IVideoDriver *driver, irr::scene::IMetaTriangleSelector* metaSelectorTerrain) 
{
	selector = 0;
	scene::IMetaTriangleSelector* metaSelector = sceneManager->createMetaTriangleSelector();

	int i=0,j=0, k=0,h=0;

	for (i=0; i<Nombre_Monstres; i++)
	{
		for (j=0; j<Nombre_Monstres; j++)
		{
			m_Monstres[i][j] = sceneManager->addAnimatedMeshSceneNode(sceneManager->getMesh ("Ressources/Mesh/Monstres.obj"),0,ID_IsMonster);
			m_Monstres[i][j]->setScale(core::vector3df(0.25f));
			m_Monstres[i][j]->setPosition(irr::core::vector3df(-Taille_Terrain,0,0));
		}
	}

	for (i=0; i<Nombre_Monstres; i++)
	{
		for (j=0; j<Nombre_Monstres; j++)
		{

			for (k=0; k<Nombre_Monstres; k++)
			{
				for (h=0; h<Nombre_Monstres; h++)
				{
					if(k!=i && h!=j && m_Monstres[k][h] != 0)
					{
						selector = sceneManager->createTriangleSelector(m_Monstres[k][h]);
						m_Monstres[k][h]->setTriangleSelector(selector);
						metaSelector->addTriangleSelector(selector);
						selector->drop();
						selector = 0;
					}
				}
			}

			scene::ISceneNodeAnimator* collision_Monstres = sceneManager->createCollisionResponseAnimator(metaSelector, m_Monstres[i][j], core::vector3df(0.25,0.25,0.25), core::vector3df(0,0,0));
			scene::ISceneNodeAnimator* collision_Terrain = sceneManager->createCollisionResponseAnimator(metaSelectorTerrain, m_Monstres[i][j], core::vector3df(0.25,0.25,0.25), core::vector3df(0,0,0));


			metaSelector->drop();

			if(collision_Monstres && collision_Terrain)
			{
				m_Monstres[i][j]->addAnimator(collision_Monstres);
				collision_Monstres->drop();

				m_Monstres[i][j]->addAnimator(collision_Terrain);
				collision_Terrain->drop();


			}
		}
	}

}



Mon nouveau code qui me permet de récupérer le CollisionResponse du terrain!

Code c++ :



Monstres::Monstres(irr::scene::ISceneManager *sceneManager, irr::video::IVideoDriver *driver, irr::scene::IMetaTriangleSelector* metaSelectorTerrain) 
{
	selector = 0;
	scene::IMetaTriangleSelector* metaSelector = sceneManager->createMetaTriangleSelector();

	int i=0,j=0,h=0,k=0;

	Monstre = sceneManager->addAnimatedMeshSceneNode(sceneManager->getMesh ("Ressources/Mesh/Monstres.obj"),0,ID_IsMonster);

	if (Monstre != 0)
	{
		Monstre->setScale(core::vector3df(0.25f));
		m_Collision_Terrain_Monstres = sceneManager->createCollisionResponseAnimator(metaSelectorTerrain,Monstre,core::vector3df(0.25,0.25,0.25), core::vector3df(0,0,0));
		Monstre->addAnimator(m_Collision_Terrain_Monstres);
	}

	for (i=0; i<Nombre_Monstres; i++)
	{
		for (j=0; j<Nombre_Monstres; j++)
		{
			m_Monstres[i][j] = Monstre;
			m_Monstres[i][j]->setPosition(irr::core::vector3df(6-Taille_Terrain,0,0));
		}
	}

	for (i=0; i<Nombre_Monstres; i++)
	{
		for (j=0; j<Nombre_Monstres; j++)
		{

			for (k=0; k<Nombre_Monstres; k++)
			{
				for (h=0; h<Nombre_Monstres; h++)
				{
					if(k!=i && h!=j && m_Monstres[k][h] != 0)
					{
						selector = sceneManager->createTriangleSelector(m_Monstres[k][h]);
						m_Monstres[k][h]->setTriangleSelector(selector);
						metaSelector->addTriangleSelector(selector);
						selector->drop();
						selector = 0;
					}
				}
			}
	
			scene::ISceneNodeAnimator* collision_Monstres = sceneManager->createCollisionResponseAnimator(selector, Monstre, core::vector3df(0.25,0.25,0.25), core::vector3df(0,0,0));

			if(collision_Monstres && m_Monstres[i][j] != 0)
			{
				m_Monstres[i][j]->addAnimator(collision_Monstres);
				collision_Monstres->drop();
			}
		}
	}

}



@Magun & johnplayer : Je vous remercie pour votre aide mais le problème n'était pas dans la création du gestionnaire de collision mais dans son utilisation dans une autre fonction! Je pense que je me suis mal expliqué et j'essaierais d'être plus clair la prochaine fois!

Merci encore!

Super-Vlan

Retour

OptionsLiens officielsCaractéristiquesStatistiquesCommunauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1441 sujets
11339 messages
Dernier membre inscrit: Saidov17
128 invités en ligne
membre en ligne: -
RSS Feed