节点的删除 - 同时删除所有绑定在节点上的对象

转载 2012年03月26日 10:39:27

1.关于节点的删除:
   1.分析:
    0.SceneManager从节点列表中删除节点
    1.要从父节点中删除该节点.
    2.基于Ogre设计的设计.SceneNode没有提供销毁movableObject对象的函数.但是有解绑与遍历movable的能力.此问题简单为解绑movable
    3.节点上一般都拥有一系列的MovableObject对象.绑定在其上的MovableObject也应该被销毁.
    4.SceneNode上还可以有ChildSceneNode.因此.这些ChildSceneNode也应当被销毁
    5.内存的释放
   2.解析Ogre提供的功能:
    1.SceneManager::destroySceneNode:
     1.从父节点清除该节点.不再对其更新.   --  解决了问题1
     2.delete 该节点.  --  解决了问题5  --  由于在析构函数里对所有object进行了解绑.所以同时也解决了问题2
     3.从节点列表中移除该节点  --  解决问题0
    2.SceneNode::detachAllObjects:
     1.对所有movableObject解除绑定  --  解决问题2
    3.SceneNode::getAttachedObjectIterator:
     1.获得movableObject的迭代器  --  可以用来解决问题3
    4.SceneNode::removeAndDestroyAllChildren:
     1.调用SceneManager对每个子节点进行删除.可解决该子节点的问题0,1,5.但此函数没什么用.
    5.SceneManager::destroyMovableObject:
     1.进行所有类型的movableObject的删除.解决问题3
     // SceneManager::destroyEntity:destroyCamera...等等
     // 1.不能解决所有movableObject的删除.
   3.综上.
    1.对绑定在节点上的movableObject的删除与所有子节点的删除是主要问题.
    2.对每个节点:
     1.遍历所有子节点.对子节点进行删除(每个节点都是相同的处理.)
     2.遍历并删除所有movableObject对象 --  解决问题3
     3.SceneManager::destroySceneNode --  解决问题0,1,2,5
  4.实现:

   // 从vim复制过来...代码变形...
   void SceneManager::DestroySceneNode( Ogre::SceneManager* pSceneManager, Ogre::SceneNode *pSceneNode )
   {
    // 遍历并删除所有movableObject对象
    Ogre::SceneNode::ObjectIterator iterMovableObject = pSceneNode->getAttachedObjectIterator();
    while ( iterMovableObject.hasMoreElements() )
    {
     // 不清楚没把movableObject从节点解绑.删除节点会不会有问题。应该不会才对...
     pSceneManager->destroyMovableObject( iterMovableObject.getNext() );
    }

    // 遍历删除子节点
    Ogre::SceneNode::ChildNodeIterator iterChild = pSceneNode->getChildIterator();
    while ( iterChild.hasMoreElements() )
    {
     DestroySceneNode( pSceneManager, (Ogre::SceneNode*)iterChild.getNext() );
    }

    // SceneManager::destroySceneNode --  解决问题0,1,2,5
    pSceneManager->destroySceneNode( pSceneNode );
    
   }

C# 关于treeview的绑定和右键菜单添加删除子节点

最近,使用到了winform的treeview控件,在网上看了好多关于treeview控件使用方法的介绍都不全面。于是我这个菜鸟进行了写了点东西出来,还请高手不要见笑。自此也就当作是自己学习的一种反省...

动态从数据库中绑定TreeView节点

  • 2010年04月28日 10:56
  • 90KB
  • 下载

mfc CTreeCtrl 添加节点 和绑定图标

1、添加控件并绑定变量 1、修改属性Line At Root为True Has Bootons改成True 3、初始化函数中如下: TVINSERTSTRUCT tvInsert; tvInsert....

关于ZStack-CC2530-2.3.0-1.4.0中simpleApp例子的 终端节点入网以及绑定操作(二)

当终端节点的ZDO向网络层发送完发现网络请求后,网络层操作完成后会向ZDO层发送发现网络确认,ZDO层利用ZDO_NetworkDiscoveryConfirmCB函数来对确认进行处理。下面看一下该函...

BST树节点的插入,删除和查找

  • 2011年12月02日 15:54
  • 2KB
  • 下载

关于ZStack-CC2530-2.3.0-1.4.0中simpleApp例子的 终端节点入网以及绑定操作(三)

上一节讲到终端节点向协调器发送一个绑定请求,在此之前呢,我们需要将协调器的绑定允许,这样终端节点才可以绑定成功~。好,我们选择workplace为simpleCollectorEB,然后我们按下s2键...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:节点的删除 - 同时删除所有绑定在节点上的对象
举报原因:
原因补充:

(最多只允许输入30个字)