Mixing Box2D Акселерометр + Гравитация? - PullRequest
1 голос
/ 05 ноября 2011

У меня есть 2 вопроса:
1. Можно ли получить текущую X-координату b2Body?Я знаю API GetPosition, но он недостаточно конкретен, мне нужна конкретно координата X.
2. Можно ли добавить гравитацию к моему конкретному b2Body в моем методе делегата UIAccelerometer?

Что я пытаюсьчтобы сделать это, переместите b2Body с текущим входом UIAccelerometer с гравитацией Box2D в одну линию, используя Apply Force.Это то, что у меня есть, разве никто не знает, как я могу включить # 1 + # 2 в эту строку?:

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

Спасибо!

Edit1: Спасибо за ответы на эти вопросывопросы, которые прояснили для меня!Это оставляет мне еще 3 вопроса:
1 .Теперь, когда я понимаю, как получить координату x в b2Body, как бы я ее установить?
Будет ли это примерно так?

body->GetPosition().x = 30;

2 .С этими координатами x это та же самая координата X, как если бы я использовал UIKit правильно?Я знаю, что UIKit создает разные вещи, я просто хочу убедиться, что если бы я делал что-то похожее в UIKit, он вывел бы ту же координату X, это правильно?

Ответы [ 2 ]

4 голосов
/ 05 ноября 2011

Ответ на 1)

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

Вы также можете написать

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

Ответ на 2)

Сохраните все необходимые значения из метода didAccelerate UIAccelerometer в переменной экземпляра.Например, accelX:

accelX = acceleration.x;

В вашем методе обновления мира просто используйте эти значения, чтобы рассчитать силу так, как вам нужно.Затем примените силу, как вы написали:

body->ApplyForce(b2Vec2(accelX*100, -30.0f), body->GetPosition());
2 голосов
/ 06 ноября 2011

1) 1) body-> GetPosition (). X

1) 2) Либо примените силу, либо измените гравитацию мира.

2) 1) Вы используете SetPosition (b2Vec2).

2) 2) Координаты Box2d делятся на PTM_RATIO, и 0,0 находится слева внизу для box2d, но слева вверху для UIKit.

...