|
我先把我的具体问题给描述一下吧:
我从osg::MatrixTransform类派生出一个新类CPart类,这个CPart类中我新添加了许多我要的信息以及一些设置和获得这些信息的方法。具体出问题的代码部分是这样的:
- //场景树的更新部分
- app->mOSG->mRoot->removeChild(app->mOSG->mt19);
- app->mOSG->mRoot->removeChild(app->mOSG->currentCollisionMt);//把mt19、currentCollisionMt脱离树根
- app->mOSG->tempDynamicMt->addChild(app->mOSG->mt19);
- app->mOSG->tempDynamicMt->addChild(app->mOSG->currentCollisionMt);//将他们挂到临时动态节点上去
- app->mOSG->mRoot->addChild(app->mOSG->tempDynamicMt);//再把临时动态节点挂到树根上
复制代码
上述代码中的mt19、currentCollisionMt、tempDynamicMt都是CPart类型的指针,里面的信息我在初始化的时候都设置好了,现在的情况是这样的:
我通过设置断点的方法看到,在没有执行removeChild方法之前,mt19里面的信息都是有的,如下图:
而一旦执行完removeChild方法,mt19l里面的信息就像被清空了一样,如下图:
之后的mt19
所以当程序再往下执行至addChild(app->mOSG->mt19)的时候就中断了。
我的理解:
(1)removeChild不是只是将该节点以及它的子节点从场景中移除么?也就是说通过场景树来查找这个节点肯定是找不到的,但是该节点的指针依旧是存在的,该指针所对应的内存中的信息都不应该被清空的吧?
(2)之前其实在QQ群里也问过这个问题,有位朋友的回答和我的理解是一致的,只不过之前做的时候还没有创建继承自osg::MatrixTransform类的CPart类,也就是说mt19这些还是osg::MatrixTransform类型的指针。我不清楚的是,继承了一个新类会对这个函数有什么影响么?
谢谢各位大侠了~~~ |
|