2011-08-02 5 views
2

아직 폭탄 시뮬레이션을 만드는 방법을 알아 내려고하고 있습니다. 나는 공과 폭탄을 가지고 공이 폭탄과 충돌 할 때 폭탄이 폭발하고 어느 방향으로 공을 던지는 지 강제합니다.폭탄 만들기 - Cocos2d/Box2d

지금은 ApplyLinearImpulse를 사용하고 있습니다. 특정 방향. 난 그냥 볼이 지금까지 어떤 방향으로가에 던져졌다 강제 할 필요가있다. 예를 들어

,

볼이 폭탄의 왼쪽 상단 측에 던져졌다가, 다음 공을 위로 강제하고하는 것입니다 왼쪽. 공이 폭탄의 왼쪽 하단에 던져진 다음 공이 왼쪽 아래로 밀려납니다.

기본적으로 폭탄이 필요합니다. 아무도 이걸하는 방법을 말해 줄 수 있습니까? 나는 Box2d에 익숙하지 않다.

지금 사용하고있는 기능입니다.

-(void) explodeBomb 
{ 
    b2Vec2 force = b2Vec2(-20,20); // give the direction for the force. 

    _ballBody->ApplyLinearImpulse(force, _ballBody->GetWorldCenter()); 
} 
+0

는 방향이 단지'의 방향으로해야하지 :

double diffX = bodyPosition.x - bombPosition.x; double diffY = bodyPosition.y - bombPosition.y; double distance = sqrt(diffX * diffX + diffY * diffY); double normalizedX = diffX/distance; double normalizedY = diffY/distance; 

것은 이제 20 단위의 힘을 적용 할 가정 pos (bomb) - pos (ball)'? – bdares

답변

4

몇 가지 수학이 필요합니다. 신체의와 폭탄의 위치가 각각 bodyPositionbombPosition에서하는 가정 :

float factor = 20.0f; 
b2Vec2 force(normalizedX * factor, normalizedY * factor); 
_ballBody->ApplyLinearImpulse(force, _ballBody->GetWorldCenter()); 
+1

이상하게 생각하지 말고 너를 사랑해. 그게 정확히 제가 말한 것이기 때문에 당신이 한 일을 제게 설명해 주시겠습니까? – Jonathan

+0

@ 존 : 기본적으로 위의 첫 번째 코드 블록은 방향에 대한 정규화 된 벡터를 계산하는 반면 두 번째 코드 블록은 적용하려는 힘을 기반으로 정규화 된 벡터의 크기를 조정합니다. p/s : 정규화 된 벡터는 길이가 1 인 벡터입니다. – Lukman