Как применить импульс к объекту БЕЗ box2d libgdx

У меня есть игра, которая почти готова, но я забыл о гравитации и импульсе, я не хотел реализовывать box2d, и я заставил гравитацию работать, но может ли кто-нибудь объяснить, как применить импульс без box2d?


person Rehaan Ahmad    schedule 23.06.2014    source источник


Ответы (1)


Вы можете имитировать импульс, просто добавляя скорость к скорости объектов. Как это:

class GameObject {
    private Vector2 velocity = new Vector2();

    public void applyImpulse(Vector2 impulse) {
        velocity.add(impulse);
    }

    public void update(float deltaTime) {
        float dampingPerSecond = 0.5f;
        float dampingFactor = Math.max(0f, 1 - deltaTime*dampingPerSecond);
        velocity.scl(dampingFactor);
    }
}

Теперь вы можете использовать его так: object.applyImpulse(new Vector2(3, 2));. Если вы обновите все свои GameObject в каждом кадре, ваш объект будет замедляться после того, как будет дан импульс. Это то, что вы ожидаете, если на ваш объект больше не будут воздействовать импульсы. Однако сделать это реалистичным способом сложно, и это может быть достигнуто только с помощью box2d. Однако вы можете настроить это и надеяться, что это сработает в вашей игре. Не забывайте после этого всегда применять гравитацию.

person noone    schedule 23.06.2014
comment
Каждый кадр. Вот почему требуется deltaTime. - person noone; 25.06.2014