2012-03-06 190 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);