Как получить гравитацию, когда экран называется (Box2D/AndEngine)?

Я использую AndEngine и Box2d для разработки игры. Я прикладываю к телу силу, чтобы удерживать его «в воздухе», равную силе тяжести. У меня есть сцена настроена так, что:

public void onAccelerationChanged(final AccelerationData pAccelerationData) {
        gravity = Vector2Pool.obtain(pAccelerationData.getX(), pAccelerationData.getY());
        this.mPhysicsWorld.setGravity(gravity);
        Vector2Pool.recycle(gravity);
    }

Теперь мне нужно установить применяемую силу:

body.applyForce(new Vector2(0,-*gravity*), new Vector2(body.getWorldCenter()));

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


person rphello101    schedule 01.07.2012    source источник


Ответы (2)


Если вы пытаетесь создать объект, на который не действует гравитация, вы можете установить его тело как статическое или кинетическое. Это более эффективно и позволяет избежать дополнительной обработки.

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

Vector2Pool.recycle(gravity);

Изменить:

Почему бы вам просто не использовать что-то подобное?

public void onAccelerationChanged(final AccelerationData pAccelerationData) {
    gravity = Vector2Pool.obtain(pAccelerationData.getX(), pAccelerationData.getY());
    this.mPhysicsWorld.setGravity(gravity);
    body.applyForce(new Vector2(-pAccelerationData.getX(), -pAccelerationData.getY()), new Vector2(body.getWorldCenter()));
    Vector2Pool.recycle(gravity);
}
person gian1200    schedule 01.07.2012
comment
Правда, я не могу установить его ни на статический, ни на кинетический. Мне нужно приложить к нему силу, и он должен столкнуться с другими телами. По этой причине я должен применить антигравитацию. Я предположил, что именно поэтому у меня тоже был NPE; однако его удаление по-прежнему вызывало проблему, потому что я не мог правильно получить доступ к значению. Мой вопрос в том, как мне получить значение силы тяжести, чтобы я мог применить ее как силу, когда экран наклонен? - person rphello101; 01.07.2012
comment
Это сработало, вроде. Сохранил pAccelerationData.getX() и .getY() в два отдельных числа с плавающей запятой и применил силу в обработчике обновления, но по сути то же самое. - person rphello101; 02.07.2012

Я внес некоторые изменения в расширение Box2D, включив в него метод setGravityScale из более поздней версии Box2D. Я разместил ссылку на,

how-do-i-make-a- body-ignore-gravity-andengine

например, заставить тело игнорировать гравитационный вызов,

Body.setGravityScale(0.0f);

Где Body может быть динамическим в вашем случае. Дело в том, что вам не нужно будет прикладывать силу к каждому объекту, который вам нужен, чтобы бросить вызов гравитации. Код, который делает это в примере, был взят из Box2D 2.2.1.

Я включил объяснение того, как это было реализовано. Существует также загрузка для GLES1.

Надеюсь это поможет.

person Steven    schedule 07.10.2012