2012-03-29 5 views
1

중력의 조건에서 표면 (트램펄린)에 작용하는 공 (원 모양의 역동적 인 몸체)이 있습니다.특정 충격 각에 대한 box2d 임펄스를 계산합니다.

공이 트램 폴린 (그림 A에서 점 B로 그려지는 부분)에 충격을 주었을 때 공 (트램 폴린 표면에 정상 임펄스)을 적용하고 싶습니다.

(도면에서 빨간색 방향)에서 (표면)에 수직하게 볼을 보낸다
b2Vec2 impulse = b2Vec2(0, [self fullMass]*[GameMaster sharedInstance].usrTrampolineForce); 

b2Vec2 impulsePoint = _body->GetWorldPoint(b2Vec2(0/PTM_RATIO, -1.0/PTM_RATIO)); 

_body->ApplyLinearImpulse(impulse, impulsePoint); 

비록에게 그것이 존중해야

enter image description here

문제는 지금 제가 사용한다는 것이다 어떤 현실적인 궤도 (검은 색으로 그려 짐).

충동을 적용하여 실제 점프를 적용하려면 어떻게해야합니까?

즉 볼 교차점의 모든 경우에 관심이 있습니다. 예를 들어 공이 트램폴린 위에 떨어질 수 있고 공이 여전히 올바른 궤적을 가져야합니다.

+0

사실적인 궤도 빨간색 _is_. 정상에 반영, IIRC. – brice

+0

@brice 나는 그림을 그려 그 지점을 만듭니다. 코드를 살펴보면 AB 엣지 (엣지와 볼 방향 벡터 사이의 각도)와 관계없이 볼과 AB 엣지 간의 모든 상호 작용이 볼을 생성한다는 것을 의미합니다 현실 세계에서 잘못된 점프. – Alex

+0

오셨습니까? 단단한 표면은 아니지만 충돌이있을 때 적극적으로 볼에 충격을주고 싶습니다. – brice

답변

4

나는 목적-C를 읽을 수는 없지만, 문제는 분명한 것 같다 :

당신의 충동 b2Vec2(0, [self fullMass]*[GameMaster sharedInstance].usrTrampolineForce)가 실제로 X 구성 요소를 포함하지 않습니다!

분할 x와 y 성분 (의사)에 충동을 :

Impulse_magnitude = Ball_mass * Trampoline_Force 
# theta is the angle between the horizontal and your impulse 
# this will depend on the angle of the trampoline. 
Impulse_x = Impulse_magnitude * Cos(theta) 
Impulse_y = Impulse_magnitude * Sin(theta) 
# Create your impulse vector 
Impulse_v = b2Vec(Impulse_x, Impulse_y) 
+0

젠장, 어떻게 x 구성 요소를 놓칠 수 있니?! 코드를 복사하여 붙여 넣을 때 발생합니다. 고마워. – Alex

+0

nice :) +1 @Brice! – TonyMkenu

관련 문제