2011-04-14 52 views
1

我使用Cocos2D與Box2D創建一個簡單的物理遊戲。我想根據碰撞體的速度來調整碰撞音效的音量。聲音碰撞時身體行進得越快,聲音越大。我正在使用具有增益參數的playSound方法的SimpleAudioEngine庫。有沒有辦法將碰撞物體(一個b2Body物體)的速度轉換爲0和1之間的數值,以適用於增益?根據碰撞速度調整音效的音量

回答

2

在post求解函數中得到一個衝激值,也許它除以100?我不確定你得到的衝動水平是多少。

void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse) 

{ 
    b2Fixture* fixtureA = contact->GetFixtureA(); 
    b2Fixture* fixtureB = contact->GetFixtureB(); 

    void* userDataA = fixtureA->GetBody()->GetUserData(); 
    CCNode *myActorA = (CCNode*)userDataA; 
    void* userDataB = fixtureB->GetBody()->GetUserData(); 
    CCNode *myActorB = (CCNode*)userDataB; 

      // stuff above will allow you to work out which objects are hitting each other 

      // get the impulse 
     int impulseInt = impulse->normalImpulses[0]; 

} 
+0

感謝您的回覆Bongeh。這看起來像是一個完美的解決方案,直到我讀到PostSolve不需要傳感器,而我的碰撞中的一個物體碰巧是一個傳感器。也許我可以採用LinearVelocity的身體並使用向量長度將其轉換爲增益值?只是要弄清楚如何翻譯規模。謝謝你的幫助! – Tim 2011-04-14 22:34:24

+0

啊,我沒有意識到你會得到一個傳感器,在技術上,因爲它只是一個碰撞檢測傳感器,沒有物理碰撞模擬被調用,所以它沒有衝動。我認爲你在那裏走上正軌。物體撞擊傳感器的速度是根據您自己的任意假仿真來計算的,從而爲您提供價值。 – Bongeh 2011-04-15 08:58:00