混合Box2D加速度计+重力?

时间:2011-11-04 22:25:54

标签: ios cocos2d-iphone box2d gravity

我有两个问题:
1.是否可以检索b2Body的当前X坐标?我知道API GetPosition,但这不够具体,我需要专门的X坐标 2.是否可以在我的UIAccelerometer委托方法中为我的特定b2Body添加重力?

我要做的是使用Apply Force将带有Box2D重力的当前UIAccelerometer输入的b2Body移动到一行。 这是我到目前为止,没有人知道如何将#1 +#2纳入这一行?:

body->ApplyForce(b2Vec2(accelX*100, -30.0f), body->GetPosition());

谢谢!

EDIT1: 感谢您回答这些问题,为我解决了这个问题! 这给我留下了3个问题:
1 即可。现在我明白了如何获得b2Body的x坐标,我该怎么设置呢? 它会是这样的吗?

body->GetPosition().x = 30;

2 即可。使用这些x坐标,它是否与我使用UIKit正确的X坐标相同?我知道UIKit框架的东西不同我只想确保如果我在UIKit中做了类似的东西,它会输出相同的X坐标,这是正确的吗?

2 个答案:

答案 0 :(得分:4)

回答1)

b2Vec pos = body->GetPosition();
float x = pos.x;
// do whatever you need to do with x

你也可以写

float x = body->GetPosition().x;

回答2)

在实例变量中存储UIAccelerometer didAccelerate方法所需的任何值。例如accelX:

accelX = acceleration.x;

在您的世界更新方法中,只需使用这些值以您需要的任何方式计算力。然后像你发布的那样施加力:

body->ApplyForce(b2Vec2(accelX*100, -30.0f), body->GetPosition());

答案 1 :(得分:2)

1)1)body-> GetPosition()。x

1)2)施加力或改变世界的引力。

2)1)您使用SetPosition(b2Vec2)。

2)2)Box2d坐标除以PTM_RATIO,0,0位于box2d的左下角,左上角为UIKit。