2010-10-05 60 views
1

我試圖建立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聲音播放不正確的原因。

回答

1

無效的處理錯誤(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