2011-04-14 3 views
1

Box2D와 함께 Cocos2D를 사용하여 간단한 물리 게임을 만듭니다. 충돌하는 신체의 속도에 따라 충돌 사운드 효과의 볼륨을 조정하고 싶습니다. 충돌시 신체가 더 빨리 움직일수록 소리가 커집니다. 게인 매개 변수가있는 playSound 메서드가있는 SimpleAudioEngine 라이브러리를 사용하고 있습니다. 충돌 몸체 (b2Body 객체)의 속도를 0과 1 사이의 값으로 변환하여 이득에 적용 할 수 있습니까?충돌 속도에 따라 음향 효과의 볼륨을 조절하십시오.

답변

2

사후 해결 함수에서 임펄스 값을 얻으려면 아마 100으로 나눕니다. 나는 당신이 얻는 충동의 수준이 무엇인지 확신하지 못한다. 귀하의 회신 Bongeh에 대한

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

감사합니다. PostSolve가 센서 용으로 호출되지 않고 내 충돌시 몸체 중 하나가 센서가된다는 것을 알기 전까지는 완벽한 솔루션처럼 보였습니다. 어쩌면 나는 몸의 LinearVelocity를 취하여 벡터 길이를 사용하여 게인 값으로 변환 할 수 있습니까? 규모를 번역하는 방법을 알아 내야합니다. 당신의 도움을 주셔서 감사합니다! – Tim

+0

아, 나는 기술적으로 센서를 가지고 있다는 것을 깨닫지 못했습니다. 기술적으로 충돌 감지 용 센서 일 뿐이므로 물리 충돌 시뮬레이션이 호출되지 않아 충동이 없습니다. 나는 네가 올바른 길로가는 것을 생각한다. 센서에 타격을주는 물체의 속도로 임의의 가짜 시뮬레이션을 계산하여 가치를 부여합니다. – Bongeh