Historique des modifications - Message

Message #3125

Sujet: Supprimé selector "tableau"


TypeDateAuteurContenu
Dernière modification02-11-2007 21:13:10Willikus
Bonjour !

Quelqu'un du forum (je sais plus qui, mais si l'auteur veut bien se reconnaitre, je n'arrive pas a trouver le pseudo) m'a passé un code permettant la charge/décharge d'une map. Ce programme était sensé etres buggé au niveau de la collision et apres quelques modifs j'obtient un truc potable :

for(int imap=0; imap<dim1; imap++)
    for(int jmap=0; jmap<dim2; jmap++)
    {

        int dist=(int)sqrt( pow(camera->getAbsolutePosition().X-(imap*20000+10000),2) + 
                            pow(camera->getAbsolutePosition().Z-(jmap*20000+10000),2));    
        scene::ITriangleSelector* selector[imap][jmap]; 
        if(dist<20000)
        {
                      
            if( bterrain[imap][jmap]==false )
            {
                
                std::string path,tmp;
                path+=itostr(imap);
                path+="-";
                path+=itostr(jmap);
                tmp="Maps/"+path+"/heightmap.bmp";

	            terrain[imap][jmap] = smgr2->addTerrainSceneNode( 
		        (c8*)tmp.c_str(),
		        0,										// parent node
		        -1,										// node id
		        core::vector3df((imap*19000.f), 1800.f, (jmap*19000.f)),			// position
		        core::vector3df(0.f, 0.f, 0.f),			// rotation
		        core::vector3df(80,30,80),		// scale
		        video::SColor ( 255, 255, 255, 255 ),	// vertexColor,
		        100,										// maxLOD
		        scene::ETPS_17//,							// patchSize
		        //10										// smoothFactor
		        );
	            terrain[imap][jmap]->setMaterialFlag(video::EMF_LIGHTING  ,false);
                    tmp="Maps/"+path+"/top.png";
                
	            terrain[imap][jmap]->setMaterialTexture(0, driver2->getTexture((c8*)tmp.c_str()));
	            terrain[imap][jmap]->setMaterialTexture(1, driver2->getTexture("Maps/02.png"));
	            terrain[imap][jmap]->setMaterialType(video::EMT_LIGHTMAP );

	            
                terrain[imap][jmap]->scaleTexture(1.0f, 100.0f);
	           
                terrain[imap][jmap]->setMaterialFlag(video::EMF_FOG_ENABLE, false);
	            // create triangle selector for the terrain	
	            selector[imap][jmap] = smgr2->createTerrainTriangleSelector(terrain[imap][jmap], 0);
	             printf("Selector : %i \
",int(selector[imap][jmap]));   
	            terrain[imap][jmap]->setTriangleSelector(selector[imap][jmap]);
	           // selector[imap][jmap]->drop();
                metaSelector->addTriangleSelector(selector[imap][jmap]); // J'ajoute au meta selector mon selector de terrain chargé

	           
	       animSaut = new scene::CSceneNodeAnimatorJumpingCollisionResponse(smgr2,metaSelector, camera,  
               core::vector3df(40,75,40), core::vector3df(0,0,0), core::vector3df(0,50,0),0.00005f/*, time */);
               camera->addAnimator(animSaut);
               animSaut->drop();
               terrain[imap][jmap]->setVisible(true);
               bterrain[imap][jmap]=true;
               

            }
        }
        else // Si la distance est a plus de 20.000
        {
        if( bterrain[imap][jmap]==true ) // Si le terrain est chargé
        {
            
                  
            terrain[imap][jmap]->remove(); // Remove le terrain
            terrain[imap][jmap] = 0; // Pour bien "vidé" la chose
            //terrain[i][j]->drop(); Ca buggai la car impossible a drop
            
            metaSelector->removeTriangleSelector(selector[imap][jmap]); // Je supprime le selector du terrain effacé

            selector[imap][jmap]->drop();
            bterrain[imap][jmap]=false;
        }
        }
    }
        
    }

Bref, dans la logique ça marche !
Mais ça bug au niveau "metaSelector->removeTriangleSelector(selector[imap][jmap]);", au lieu que la suppression de selector soit celle de la map supprimé, c'est celle de la derniere map chargé.

Je soupsonne que le problème viennent de la déclaration du tableau "scene::ITriangleSelector* selector[imap][jmap]; " qui n'est pas vraiment un tableau...

Enfin... quelqu'un peu m'aider ?

a+
w

EDIT : c'est bon, j'avais oublier de "définir" la double entré du tableau... tout marche nickel !
Création du message31-10-2007 19:08:47Willikus
Bonjour !

Quelqu'un du forum (je sais plus qui, mais si l'auteur veut bien se reconnaitre, je n'arrive pas a trouver le pseudo) m'a passé un code permettant la charge/décharge d'une map. Ce programme était sensé etres buggé au niveau de la collision et apres quelques modifs j'obtient un truc potable :

for(int imap=0; imap<dim1; imap++)
    for(int jmap=0; jmap<dim2; jmap++)
    {

        int dist=(int)sqrt( pow(camera->getAbsolutePosition().X-(imap*20000+10000),2) + 
                            pow(camera->getAbsolutePosition().Z-(jmap*20000+10000),2));    
        scene::ITriangleSelector* selector[imap][jmap]; 
        if(dist<20000)
        {
                      
            if( bterrain[imap][jmap]==false )
            {
                
                std::string path,tmp;
                path+=itostr(imap);
                path+="-";
                path+=itostr(jmap);
                tmp="Maps/"+path+"/heightmap.bmp";

	            terrain[imap][jmap] = smgr2->addTerrainSceneNode( 
		        (c8*)tmp.c_str(),
		        0,										// parent node
		        -1,										// node id
		        core::vector3df((imap*19000.f), 1800.f, (jmap*19000.f)),			// position
		        core::vector3df(0.f, 0.f, 0.f),			// rotation
		        core::vector3df(80,30,80),		// scale
		        video::SColor ( 255, 255, 255, 255 ),	// vertexColor,
		        100,										// maxLOD
		        scene::ETPS_17//,							// patchSize
		        //10										// smoothFactor
		        );
	            terrain[imap][jmap]->setMaterialFlag(video::EMF_LIGHTING  ,false);
                    tmp="Maps/"+path+"/top.png";
                
	            terrain[imap][jmap]->setMaterialTexture(0, driver2->getTexture((c8*)tmp.c_str()));
	            terrain[imap][jmap]->setMaterialTexture(1, driver2->getTexture("Maps/02.png"));
	            terrain[imap][jmap]->setMaterialType(video::EMT_LIGHTMAP );

	            
                terrain[imap][jmap]->scaleTexture(1.0f, 100.0f);
	           
                terrain[imap][jmap]->setMaterialFlag(video::EMF_FOG_ENABLE, false);
	            // create triangle selector for the terrain	
	            selector[imap][jmap] = smgr2->createTerrainTriangleSelector(terrain[imap][jmap], 0);
	             printf("Selector : %i \
",int(selector[imap][jmap]));   
	            terrain[imap][jmap]->setTriangleSelector(selector[imap][jmap]);
	           // selector[imap][jmap]->drop();
                metaSelector->addTriangleSelector(selector[imap][jmap]); // J'ajoute au meta selector mon selector de terrain chargé

	           
	       animSaut = new scene::CSceneNodeAnimatorJumpingCollisionResponse(smgr2,metaSelector, camera,  
               core::vector3df(40,75,40), core::vector3df(0,0,0), core::vector3df(0,50,0),0.00005f/*, time */);
               camera->addAnimator(animSaut);
               animSaut->drop();
               terrain[imap][jmap]->setVisible(true);
               bterrain[imap][jmap]=true;
               

            }
        }
        else // Si la distance est a plus de 20.000
        {
        if( bterrain[imap][jmap]==true ) // Si le terrain est chargé
        {
            
                  
            terrain[imap][jmap]->remove(); // Remove le terrain
            terrain[imap][jmap] = 0; // Pour bien "vidé" la chose
            //terrain[i][j]->drop(); Ca buggai la car impossible a drop
            
            metaSelector->removeTriangleSelector(selector[imap][jmap]); // Je supprime le selector du terrain effacé

            selector[imap][jmap]->drop();
            bterrain[imap][jmap]=false;
        }
        }
    }
        
    }

Bref, dans la logique ça marche !
Mais ça bug au niveau "metaSelector->removeTriangleSelector(selector[imap][jmap]);", au lieu que la suppression de selector soit celle de la map supprimé, c'est celle de la derniere map chargé.

Je soupsonne que le problème viennent de la déclaration du tableau "scene::ITriangleSelector* selector[imap][jmap]; " qui n'est pas vraiment un tableau...

Enfin... quelqu'un peu m'aider ?

a+
w

EDIT : c'est bon, j'avais oublier de "définir" la double entré du tableau... tout marche nickel !

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