#1
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
31-10-2007 19:08:47
- Willikus
- Membres

- 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



