Задать вопрос
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;
}


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

Поэтому нет ли еще какого-нибудь способа задать пули импульс только один раз, чтобы она летела постоянно в нужную сторону?
  • Вопрос задан
  • 552 просмотра
Подписаться 1 Оценить Комментировать
Ответ пользователя GavriKos К ответам на вопрос (3)
GavriKos
@GavriKos Куратор тега Разработка игр
Но для того, чтобы при изменении направления игрока, пули, которые уже вылетели так же не меняли своего направления, я решил сделать флажок.


запоминаете поворот в классе "пуля" на момент выстрела, и потом используете это значение в задавании импульса, а не вычисляете каждый раз.
Ответ написан