¿Cómo obtengo la gravedad cuando la pantalla se titula (Box2D/AndEngine)?

Estoy usando AndEngine y Box2d para desarrollar un juego. Estoy aplicando una fuerza a un cuerpo para mantenerlo "en lo alto" igual a la gravedad. Tengo la escena configurada para que:

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

Ahora necesito configurar mi fuerza aplicada:

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

¿Cómo obtengo el valor de la gravedad para poder aplicarla como fuerza cuando la pantalla está inclinada?

preguntado el 01 de julio de 12 a las 05:07

2 Respuestas

Si está tratando de tener un objeto que no se vea afectado por la gravedad, puede configurar su cuerpo como estático o cinético. Es más eficiente y le evita un procesamiento adicional.

Por cierto, supongo que se está volviendo nulo porque ya ha reciclado el vector con esta línea

Vector2Pool.recycle(gravity);

Edit:

¿Por qué no usas simplemente algo como esto?

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);
}

Respondido 01 Jul 12, 22:07

Sin embargo, es cierto que no puedo configurarlo en estático o cinético. Necesito aplicarle una fuerza y ​​tiene que chocar con otros cuerpos. Por esa razón, tengo que aplicar "antigravedad". Supuse que por eso también tenía una NPE; sin embargo, eliminarlo aún causó un problema porque no pude acceder al valor correctamente. Mi pregunta es, ¿cómo obtengo el valor de la gravedad para poder aplicarla como fuerza cuando la pantalla está inclinada? - rphello101

Eso funcionó, un poco. Almacenó pAccelerationData.getX() y .getY() en dos flotadores separados y aplicó la fuerza en un controlador de actualización, pero esencialmente igual. - rphello101

Hice algunas modificaciones en la extensión Box2D para incluir el método setGravityScale de la versión más reciente de Box2D. Publiqué el enlace en

cómo-hago-un-cuerpo-ignorar-la-gravedad-y-el-motor

por ejemplo, hacer que un cuerpo ignore la llamada de la gravedad,

Body.setGravityScale(0.0f);

Donde Body podría ser dinámico en tu caso. El punto es que no necesitarías aplicar una fuerza para cada objeto que necesites para desafiar la gravedad. El código que hace esto en el ejemplo fue tomado de Box2D 2.2.1.

Incluí una explicación de cómo se implementó. También se proporciona una descarga para GLES1.

Espero que esto ayude.

contestado el 23 de mayo de 17 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.