#1 

31-10-2007 19:08:47

Willikus
Membres
Avatar de Willikus
Date d'inscription:
Messages: 150
IP: 86.214.49.182
Courriel  Site web

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 !


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


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