2012-04-18 11 views
5

sto applicando un impulso su un oggetto box2d con qualcosa di simile:Come posso fare un impulso in modo che il punto b si allontana dal punto A in box2d/cocos2diphone

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

So che questo è probabilmente elevata la matematica scolastica, e prometto che mi sono sforzato di scoprirlo da solo; per favore perdona la mia ignoranza.

Se ho oggetti a, b e c - e l'oggetto a è al punto medio di bec, come posso creare un impulso di Box2D in modo che gli oggetti b e c si spostino da a alla velocità v?

scientific diagram drawn with great skill and focused intent

+0

+1: Ama il gatto. – RBarryYoung

+0

Grazie. Se la programmazione non funziona, andrò alle belle arti. – glenstorey

risposta

3

provare a utilizzare questo:

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()); 

Spero che sia chiaro quello che sta succedendo qui. In caso contrario, basta chiedere :)

+0

Funziona un piacere grazie! Ricevo un errore sulla linea 2 "Il riferimento del membro b2Vec2 non è un puntatore" ma se lo tolgo le cose sembrano funzionare bene, cosa significa questo errore? – glenstorey

+0

Ciò presuppone che B e C siano esattamente sui lati opposti di A. In caso contrario, è sufficiente ripetere le prime tre linee per C per ottenere impulsoC. – iforce2d

+0

Riga fissa 2 - avrebbe dovuto essere un punto invece di '->'. @ iforce2d - La domanda dice che l'oggetto a è nel mezzo. – jrtc27

Problemi correlati