2012-04-18 11 views
5

estoy aplicando un impulso sobre un objeto box2d con algo como esto:¿Cómo puedo hacer un impulso para que el punto B se aleja del punto a en box2d/cocos2diphone

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

Sé que esto es probablemente alta matemáticas escolares, y prometo que me he esforzado por descubrir esto por mí mismo; por favor, perdona mi ignorancia.

Si tengo los objetos a, byc - y el objeto a está en el punto medio de byc, ¿cómo puedo crear un impulso Box2D para que los objetos b y c se alejen de una velocidad v?

scientific diagram drawn with great skill and focused intent

+0

+1: Love the cat. – RBarryYoung

+0

Gracias. Si la programación no funciona, entraré en bellas artes. – glenstorey

Respuesta

3

tratar de usar esto:

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

espero que sea claro lo que está pasando aquí. Si no, solo pregunte :)

+0

¡Trabaja mucho, gracias! Obtengo un error en la línea 2 "la referencia de miembro b2Vec2 no es un puntero", pero si lo saco, las cosas parecen funcionar bien, ¿qué significa este error? – glenstorey

+0

Esto supone que B y C están exactamente en lados opuestos de A. Si no, solo necesita repetir las primeras tres líneas para obtener C de impulso. – iforce2d

+0

Línea fija 2: debería haber sido un punto en lugar de '->'. @ iforce2d - La pregunta dice que el objeto a está en el medio. – jrtc27

Cuestiones relacionadas