“无效的对象句柄使用”在FMOD 3D音效收听

问题描述:

我试图建立3D在使用食人魔游戏与FMOD声音。声音监听器连接到以样条线运行的相机。我有附加到播放器的脚步声音,音量应由播放器距离相机多远来决定。“无效的对象句柄使用”在FMOD 3D音效收听

踩在脚下的声音充当虽然声音听者不从它的起始位置移动。在关卡开始时,脚步声很大,当你离开时,他们会变得更安静,直到你再也听不到它们了。如果你跑回去,他们会变得更响。但是,声音听者的场景节点的位置正在更新并与相机保持同步。

在代码有正在生成一个错误FMOD​​下面的行上的每一帧:

result = m_system->set3DListenerAttributes(0, &pos, &vel, &forward, &up); 

结果总是返回FMOD_ERR_INVALID_HANDLE,用下面的错误串 - “无效对象句柄被用于”。我无法弄清楚为什么会产生这个错误。所有的FMOD_VECTORs作为参数被传入并被初始化,我似乎正在设置系统。该代码是遍布不同类的地方,但这里有重要的位:

// Initialise FMOD system 
result = m_system->init(4093, FMOD_INIT_3D_RIGHTHANDED, 0); 
result = m_system->set3DSettings(1.0f, 1.0f, 1.0f); 

// Create sound 
FMOD_MODE mode = FMOD_SOFTWARE; 
if(a_positional) 
{ 
    mode |= FMOD_3D; 
} 
FMOD_CREATESOUNDEXINFO info; 
memset(&info, 0, sizeof(FMOD_CREATESOUNDEXINFO)); 
info.cbsize = sizeof(FMOD_CREATESOUNDEXINFO); 
r = sys->_getFMODSystem()->createSound(a_file.c_str(), mode, &info, &retVal); 

// Update sound listener 
FMOD_VECTOR pos, vel, forward, up; 

pos.x = m_sceneNode->getParentSceneNode()->_getDerivedPosition().x; 
pos.y = m_sceneNode->getParentSceneNode()->_getDerivedPosition().y; 
pos.z = m_sceneNode->getParentSceneNode()->_getDerivedPosition().z; 

vel.x = 0; 
vel.y = 0; 
vel.z = 0; 

forward.x = 0; 
forward.y = 0; 
forward.z = 1; 

up.x = 0; 
up.y = 1; 
up.z = 0; 

result = m_system->set3DListenerAttributes(0, &pos, &vel, &forward, &up); 
// FMOD error: (36) An invalid object handle was used. 

任何想法,为什么“结果”将返回这个错误?我假设这是3D声音播放不正确的原因。

无效的处理错误(FMOD_ERR_INVALID_HANDLE)指的是你在调用函数的对象,在这种情况下,它意味着m_system句柄无效。

首先我注意到你已经被遗漏的代码来创建FMOD ::系统对象,就可以确认你正在做以下几点:

result = FMOD::System_Create(&m_system); 

其次,只要你有代码的地方,你可以验证m_system的值在创建和使用时保持不变(可能是破坏了句柄)。

最后(作为一个长镜头),如果你的标题和11b是不同步的,你可能会得到一个不同的错误信息,确保您使用的都是来自同一个版本FMOD的头文件和库。

额外注,尝试FMOD的日志版本链接,你应该得到的TTY一些有用的调试输出,可以帮助您的情况。

+0

你完全正确,m_system为空。我在另一个类中创建了FMOD系统,并且应该在这个类中传递指向m_system的指针。我不知道你可以在空指针上调用函数,如果函数不访问成员变量,程序不会中断,所以我学到了一些新东西。 – 2010-10-07 22:55:02

+0

非常好,是的,只要类不触及任何成员变量,你可以调用一个NULL指针的函数。如果仔细观察FMOD的“指针”,尽管你会注意到它们中的大多数实际上都是处理的,所以像'1'这样的值是完全有效的。 – 2010-10-11 03:32:29