2012-04-18 11 views
5

Tôi đang áp dụng một xung trên một đối tượng Box2D với một cái gì đó như thế này:Làm thế nào tôi có thể làm cho một xung để điểm b di chuyển ra khỏi điểm một trong Box2D/cocos2diphone

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

Tôi biết điều này có lẽ là cao toán học, và tôi hứa tôi đã nỗ lực để khám phá điều này cho bản thân mình; xin vui lòng tha thứ cho sự thiếu hiểu biết của tôi.

Nếu tôi có đối tượng a, b và c - và đối tượng a ở giữa điểm b và c, làm thế nào tôi có thể tạo xung Box2D sao cho các đối tượng b và c di chuyển khỏi vận tốc v?

scientific diagram drawn with great skill and focused intent

+0

+1: Yêu mèo. – RBarryYoung

+0

Cảm ơn. Nếu lập trình không thành công, tôi sẽ đi vào mỹ thuật. – glenstorey

Trả lời

3

Hãy thử sử dụng này:

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

Tôi hy vọng đó là rõ ràng những gì đang xảy ra ở đây. Nếu không, chỉ cần hỏi :)

+0

Hoạt động nhờ điều trị! Tôi nhận được một lỗi trên dòng 2 "tham khảo thành viên b2Vec2 không phải là một con trỏ" nhưng nếu tôi đưa nó ra những điều dường như làm việc tốt, những gì hiện lỗi này có nghĩa là gì? – glenstorey

+0

Điều này giả định rằng B và C là ở phía đối diện chính xác của A. Nếu không, bạn chỉ cần lặp lại ba dòng đầu tiên cho C để có được xung. – iforce2d

+0

Dòng cố định 2 - nó phải là một dấu chấm thay vì '->'. @ iforce2d - Câu hỏi nói rằng đối tượng a nằm ở giữa. – jrtc27

Các vấn đề liên quan