Historique des modifications - Message

Message #11300

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


Type Date Auteur Contenu
Création du message 27-05-2013 20:54:05 Super-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

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