查看: 1189|回复: 5

请教SoundNode无法得到它的SoundState的原因

[复制链接]

该用户从未签到

发表于 2010-8-25 11:20:17 | 显示全部楼层 |阅读模式
osgAL::SoundNode* sound_1 = new osgAL::SoundNode;
      sound_1 = vp->sound_node0;
      osgAL::SoundState *sta = new osgAL::SoundState;
      sta = sound_1->getSoundState();//出错

该用户从未签到

 楼主| 发表于 2010-8-25 11:33:04 | 显示全部楼层
补充错误提示:
->         osgALd.dll!osg:bserver_ptr<osgAL::SoundState>::get()  行81 + 0x11 字节
         对应
->          inline T* get() const { return _ptr; }

该用户从未签到

发表于 2010-8-26 00:03:28 | 显示全部楼层
这里您应该用智能指针,
osg::ref_ptr< osgAL::SoundState> sta = new osgAL::SoundState();
~~~~~~~~~~~

该用户从未签到

 楼主| 发表于 2010-8-27 10:54:14 | 显示全部楼层
上面问题已经解决,主要是我用的指针vp不对。谢谢
新问题:
     在您的书中提到:在退出程序之前,需要手动析构声音变量,不然退出会发出错误。
     我在程序析构函数渲染结束之后(mViewer->stopThreading();)加了以下代码:
     if (osg::Referenced::getDeleteHandler())
        {
         osg::Referenced::getDeleteHandler()->setNumFramesToRetainObjects(0);
         //把所有的Object都放入DeleteHandler
        osg::Referenced::getDeleteHandler()->flushAll();
        }
        //声音析构
      osgAL::SoundManager::instance()->shutdown();

       程序退出时老出现这样的问题:
  if (needDelete)
    {
        if (getDeleteHandler()) deleteUsingDeleteHandler();
  ->      else delete this;  //错误指向这里
    }
  问题找个好长时间,没有发现原因,希望您分析一下。
另外说明下:在声音设置中,我用的是一般指针,没有使用智能指针,用了的话就有错误,程序运行有错误

该用户从未签到

发表于 2010-8-27 23:49:50 | 显示全部楼层
osgAL这个库本身很多地方都对智能指针有严格要求,所以需要使用智能指针配合,,,同时,,您的程序完全使用智能指针对您管理内存也是一种有效的方式~~~~~
具体的,您可以运行书中的示例,,这个肯定是没有问题的~~~~~~~

该用户从未签到

 楼主| 发表于 2010-8-28 13:18:57 | 显示全部楼层
我的问题已经解决了,谢谢:):)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表