2012-04-18 10 views
5

mam stosowania impuls na box2d obiektu z mniej więcej tak:Jak mogę zrobić tak, że impuls litera b oddala się od punktu A w box2d/cocos2diphone

b2Vec2 impulse = b2Vec2(4.0f, 15.0f); 
body->ApplyLinearImpulse(impulse, body->GetWorldCenter()); 

wiem, że to prawdopodobnie wysoka matematyki szkolnej, i obiecuję, że uczyniłem wysiłki, aby odkryć to na własne oczy; proszę wybaczyć moją niewiedzę.

Jeśli mam obiekty a, b i c - a obiekt a znajduje się w środkowym punkcie b i c, w jaki sposób mogę utworzyć impuls Box2D, aby obiekty b i c odsuwały się od prędkości?

scientific diagram drawn with great skill and focused intent

+0

+1: Kochaj kota. – RBarryYoung

+0

Dzięki. Jeśli programowanie nie zadziała, przejdę do sztuk plastycznych. – glenstorey

Odpowiedz

3

Spróbuj użyć tego:

b2Vec2 impulseB = bodyB->GetPosition() - bodyA->GetPosition(); 
impulseB /= impulseB.Length(); 
impulseB *= predefinedScaleValue; // predefinedScaleValue is your velocity 
b2Vec2 impulseC = -impulseB; 
bodyB->ApplyLinearImpulse(impulseB, bodyB->GetWorldCenter()); 
bodyC->ApplyLinearImpulse(impulseC, bodyC->GetWorldCenter()); 

Mam nadzieję, że to jasne, co się tu dzieje. Jeśli nie, po prostu zapytaj :)

+0

Działa dzięki uprzejmości! Dostaję błąd na linii 2 "Odwołanie do członka b2Vec2 nie jest wskaźnikiem", ale jeśli go wyjąłem, wszystko wydaje się działać dobrze, co oznacza ten błąd? – glenstorey

+0

Zakłada się, że B i C znajdują się dokładnie po przeciwnych stronach A. Jeśli nie, wystarczy powtórzyć pierwsze trzy linie dla C, aby uzyskać impuls. – iforce2d

+0

Naprawiono linię 2 - powinna to być kropka zamiast '->'. @ iforce2d - Pytanie mówi, że obiekt a znajduje się pośrodku. – jrtc27

Powiązane problemy