Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Ogre3d] Suppression d'éléments

Problème d'effacement d'entity

    31 décembre 2007 à 12:13:54

    Bonjour,
    je débute sur Ogre3D (enfin, cela fais bientôt 3 mois mais je ne fais pas que coder sous Ogre ^^) et je suis confronter à un problème peut-être tout bête:
    lors d'un changement de carte dans mon petit jeu, j'efface tout ce que je peux, dont mes entities:
    1. Ogre::Entity    *entity = this->mSceneMgr->getEntity("nom de mon entity");
    2.                 Ogre::SceneNode *parent = entity->getParentSceneNode();
    3.                 parent->detachObject(entity);
    4.                 this->mSceneMgr->destroyEntity(entity);
    5.                 this->mSceneMgr->destroySceneNode("nom de mon scene node, PARENT en fait");
    6.                 // et quand j'ai tout supprimé
    7.                 this->mSceneMgr->clearScene();

    Le problème est que je me retrouve avec mes anciens Entities encore sur ma carte, je les vois, ils ne bougent pas car je ne les traite plus, mais ils sont là!
    Qu'ai-je oublié ?
    merci beaucoup

    • Partager sur Facebook
    • Partager sur Twitter
      31 décembre 2007 à 17:52:38

      Essay sa bien que je ne sois pas sur que sa marche:
      1. SceneNode* parent = entity->getParentSceneNode();
      2. parent->detachObject(entity);
      3. mSceneMgr->destroyEntity(entity->getName());
      4. mSceneMgr->destroySceneNode(parent->getName());

      En esperant avoir aider ;)
      • Partager sur Facebook
      • Partager sur Twitter
        31 décembre 2007 à 19:45:33

        merci, ca revient au final au même, merci quand même
        ps: sympa tes tutos :)
        • Partager sur Facebook
        • Partager sur Twitter
          31 décembre 2007 à 23:04:25

          merci!
          Sa ne marche toujours pas...c'est bizard car je t'est donner le code du how to de Ogre.Quelle version de Ogre a tu?Et est ce que tu fait sa dans une framelistener?
          • Partager sur Facebook
          • Partager sur Twitter
            31 décembre 2007 à 23:46:40

            j'ai la 1.4.4 ou 1.4.5 (l'avant derniere, pas celle d'avant hier ^^)
            et sinon oui, jfais ca dans une fonction (bloquante), appelée dans mon framelistener, donc il ne peut rien se passer pendant que j'efface
            • Partager sur Facebook
            • Partager sur Twitter
              1 janvier 2008 à 9:29:29

              Et qu'est ce qui se passe si tu essay de bouger un sceneNode que tu a suprimer?
              • Partager sur Facebook
              • Partager sur Twitter
                1 janvier 2008 à 10:19:11

                ca plante méchament:
                au départ en plus j'avais fais le clearScene() avant de détruire les entitées, et des que je supprimais les SceneNodes de mes entités, ca plantait ^^ évidement
                • Partager sur Facebook
                • Partager sur Twitter
                  1 janvier 2008 à 15:30:37

                  Est tu sur de ne pas avoir créer des entitée en double?Sinon tu pourais metre le code s'il est pas trop long que je le test.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 janvier 2008 à 15:49:25

                    c'est un peu long (une vingtaine de fichiers ^^), mais en simplifié:
                    1. // dans le constructeur de mon listener:
                    2. this->createMapWorld(PATH_MAP_1);
                    3. this->majPersoIterators();
                    4. void    GlobalListener::createMapWorld(const Ogre::String originMap)
                    5. {
                    6.         // on a tout initialisé, on crée les entitées sur le terrain, et les persos qui vont avec
                    7.         this->mMaps[this->currentMap].mapToEntities(mSceneMgr);
                    8. }
                    9. void    CMap::mapToEntities(Ogre::SceneManager * pSceneMgr)
                    10. {
                    11.         Ogre::Entity *ent;
                    12.         Ogre::SceneNode *node;
                    13.         this->mSceneMgr = pSceneMgr;
                    14.         this->mMapNode = pSceneMgr->getRootSceneNode();
                    15.         //      Génération des persos
                    16.         // on genère les entitées et les nodes des persos, puis on fait les calculs de position
                    17.         std::map<unsigned int, CPerso>::iterator it = this->mPersosList.begin();
                    18.         std::map<unsigned int, CPerso>::iterator it_end = this->mPersosList.end();
                    19.         while (it != it_end)
                    20.         {
                    21.                 it->second.generateEntityAndNode();
                    22.                 it++;
                    23.         }
                    24. // etc.
                    25. }
                    26.         // Méthode de création de l'entité (UNIQUE) et du noeud (UNIQUE) du perso            // UNIQUE car deux objets n'ont pas le droit d'avoir le même nom, sinon Ogre3D ne sait pas lequel choisir et plante
                    27.         void    CPerso::generateEntityAndNode()
                    28.         {
                    29.                 //      On prépare les noms uniques pour l'entity et le 'scene node'
                    30.                 ++num_perso;
                    31.                 if (num_perso > MAX_PERSOS_PER_MAP)
                    32.                         num_perso = 0;
                    33.                 std::string meshNameEpur  = mMeshName.substr(0, mMeshName.size() - 5);
                    34.                 char    entityName[30], nodeName[30];
                    35.                 sprintf(entityName, "%s%d", meshNameEpur.c_str(), num_perso);
                    36.                 sprintf(nodeName, "%s%dNode", meshNameEpur.c_str(), num_perso);
                    37.                 saveEntityNodeName[std::string(entityName)] = std::string(nodeName);
                    38.                 //      On crée l'entité ...
                    39.                 this->mEntity = mSceneMgr->createEntity(Ogre::String(entityName), mMeshName);
                    40.         //      ... et le 'scene node' qui va avec ...
                    41.                 this->mNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(Ogre::String(nodeName), this->mPersoPos);
                    42.                 //      ... et on les lie
                    43.         this->mNode->attachObject(mEntity);
                    44.                 this->mNode->setPosition(mPersoPos);
                    45.                 this->mNode->yaw(Degree(180));
                    46.                 this->setAnimation(this->mPersoMove != Vector3::ZERO ? ANIMATION_WALK : ANIMATION_IDLE);
                    47.                 this->calcMovement();
                    48.         }
                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 janvier 2008 à 22:59:21

                      Et est ce que tu bouge tes entitée entre temps?Car sinon c'est for possible que tu est 2 entité au meme endroit et que quand tu en suprime une,tu voi tjrsd l'autre...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 janvier 2008 à 23:32:50

                        je bloque le programme, enfin appel à une fonction, donc jbouge plus rien
                        et j'ai qu'un seul thread, rien ne peut toucher mes entitées quand j'y touche
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 janvier 2008 à 11:38:10

                          Ce que je voulais dir est : est ce que tu bouge tes entitée entre la création et la destruction?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 janvier 2008 à 11:53:27

                            ah oui, pardon:
                            je les crée, je les bouge, je les détruit
                            • Partager sur Facebook
                            • Partager sur Twitter
                              5 janvier 2008 à 16:21:36

                              ba honetement la j'en ai aucune idée...demande sur le forum officiel.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 janvier 2008 à 16:26:39

                                je l'ai fait, sinbad m'a répondu lui même que normalement ca suffisait, jvais essayer de reparser entièrement ligne par ligne mon code, j'ai dû faire une erreur, mais je ne vois absolument pas où pour le moment
                                merci beaucoup en tout cas de ton aide
                                • Partager sur Facebook
                                • Partager sur Twitter

                                [Ogre3d] Suppression d'éléments

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown