Arti-Jack
@Arti-Jack

Как задать импульс у пули один раз так, чтобы при этом она постоянно летела в нужную сторону?

Доброго времени суток!

У меня есть класс Box2DBullets, который представляет из себя Rectangle определенного размера.

Его инициализация:
bdef.type = BodyDef.BodyType.DynamicBody;
        bdef.position.set(x, y);
        b2body = world.createBody(bdef);
        shape.setAsBox(1 / MyGdxGame.PPM, 1 / MyGdxGame.PPM);
        fdef.shape = shape;
        bdef.bullet = true;
        b2body.createFixture(fdef).setUserData("bullet");


И тут мне нужно сделать так, чтобы при повороте направо пуля летела в ту же сторону (и, соответственно, наоборот, если поворот был сделан налево).

Для этого я решил сделать своеобразный флажок. Т.е при обработке в хэндлерах, я определяю в какую сторону повернулся игрок и затем задаю ArrayList-у с пулями тот же поворот. Но для того, чтобы при изменении направления игрока, пули, которые уже вылетели так же не меняли своего направления, я решил сделать флажок.

if (checkTurning == false) {
       if (factingRight) b2body.applyLinearImpulse(new Vector2(velocity_x, 0), b2body.getWorldCenter(), true);
       if (factingLeft) b2body.applyLinearImpulse(new Vector2(-velocity_x, 0), b2body.getWorldCenter(), true);
       checkTurning = true;
}


Но этот способ не работает. Как я понял, импульс пулям необходимо задавать постоянно.

Поэтому нет ли еще какого-нибудь способа задать пули импульс только один раз, чтобы она летела постоянно в нужную сторону?
  • Вопрос задан
  • 551 просмотр
Решения вопроса 1
MrNexeon
@MrNexeon
При отсутствии гравитации, объект под действием импульса будет иметь постоянную скорость, которая не будет изменяться. Если имеется гравитация, то можно задать импульс по-мощнее, чтобы пуля летела долго.

Если это какая-то ракета, то можно использовать физический подход: У ракеты есть реактивная тяга, которая и приводит ракету в движение. Реактивную тягу можно имитировать обычной силой с помощью ApplyForce()
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
GavriKos
@GavriKos Куратор тега Разработка игр
Но для того, чтобы при изменении направления игрока, пули, которые уже вылетели так же не меняли своего направления, я решил сделать флажок.


запоминаете поворот в классе "пуля" на момент выстрела, и потом используете это значение в задавании импульса, а не вычисляете каждый раз.
Ответ написан
То есть вы хотите один раз присвоить значение, так чтобы потом оно менялось само?
А как оно должно меняться само? Вы не хотите сами писать методы? Android API? но по факту это просто использование внешней реализации методов. Или вы хотите чтобы оперативная память сама меняла значения? - но это невозможно.
Обычно пишут отдельный метод Update() чтобы обновлять все значения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы