2012-03-06 70 views
4

我想按照當前所面向的方向對我的對象施加一個力,這裏是我的代碼,但是當我嘗試做時,它會拋出錯誤force * t,我在做什麼錯誤?box2d在特定方向上施加力

 b2Transform t; 
     t.Set(b2Vec2(0, 0), spaceCraft->GetAngle()); 
     b2Vec2 force = b2Vec2(0, 2.5f); 
     spaceCraft->ApplyForce(force * t, spaceCraft->GetPosition()); 
+2

的http://計算器.com/questions/9164146/simple-gun-in-cocos2dbox2d-game – iforce2d 2012-03-08 22:27:06

+0

Thanks @ iforce2d that worked! – Chris 2012-03-12 22:45:56

+0

@ iforce2d請將此作爲答案寫下,以便我可以接受 – Chris 2012-03-18 10:04:08

回答

3

最簡單的方法是看對象「面對」的方向,當你定義的身體,並使用GetWorldVector來查看它是如何改變的。例如,如果在創建主體時它直接朝上,則這將是方向(0,1)。然後你可以使用GetWorldVector隨時得到世界上矢量的電流方向座標施加力:

b2Vec2 forceDirection = body->GetWorldVector(b2Vec2(0,1)); 
8

我不能嘗試,但現在這樣的事情應該這樣做:

float magnitude=2.5f; 
b2Vec2 force = b2Vec2(cos(spaceCraft->GetAngle()) * magnitude , sin(spaceCraft->GetAngle()) * magnitude); 
spaceCraft->ApplyForce(force, spaceCraft->GetPosition()); 
0

你可以嘗試這樣的IFORCE2D建議

float mangnitude = anything; 
b2Vec2 forceDirection = body->GetWorldVector(b2Vec2(0,1)); 

forceDirection = magnitude * forceDirection; 
body->ApplyLinearImpulse(forceDirection, body->GetPosition(), true);