#0 

31-10-2007 20:08:47

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
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 :

Code:

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 \n",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 !

Dernière modification par Willikus (02-11-2007 22:13:10)


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
78 invités en ligne
Aucun membre connecté
RSS Feed