Skip to content

fisica‐es

JNightRide edited this page Dec 17, 2023 · 9 revisions

Física

jMe3GL2 integra Dyn4j como motor de física, inicializamos el espacio físico de la siguiente manera:

Dyn4jAppState<PhysicsBody2D> dyn4jAppState = new Dyn4jAppState<>(ThreadingType.PARALLEL);
stateManager.attach(dyn4jAppState);

Puede iniciar de forma paralela (ThreadingType.PARALLEL) o secuencial (ThreadingType.SEQUENTIAL). Si requiere que los cuerpos físicos tengan una mejor sincronización con los modelos se recomienda la forma paralela (esta forma puede generar costos ya que sincroniza el motor de la física con jme3).

Generando cuerpos físicos.

Cuerpo - Terreno

¿Recuerdas el terreno (suelo)?, utilizaremos este modelo para generar el primer cuerpo físico:

...
RigidBody2D floorBody2D = new RigidBody2D(new RectangleCollisionShape(floorSprite.getWidth(), floorSprite.getHeight()));
floorBody2D.setMass(MassType.INFINITE);
floorBody2D.translate(0, -4);

/* Agregando el cuerpo físico al modelo. */
floor.addControl(floorBody2D);

/* Agregar la forma física al espacio. */
dyn4jAppState.getPhysicsSpace().addBody(floorBody2D);
...

En este cuerpo utilizamos un rectángulo como forma física, cada cuerpo que utiliza el motor es un objeto control para los Spatial de JME a su vez un Body de Dyn4j. Esta forma de trabajar facilita el acceso al cuerpo físico a sí mismo con el control del modelo.

NOTA: Si quiere remover o hacer una acción que puede provocar una ruptura en el proceso central del JME, se recomienda sincronizar los procesos para evitar el problema.

Cuerpo - Jugador

De la misma formas agregamos un cuerpos físico al al cubo con cara (el jugador), Esta vez utilizado una formas generada por la clase utilidades GeometryUtilities:

RigidBody2D playerBody2D = new RigidBody2D();
BodyFixture bodyFixture = new BodyFixture(GeometryUtilities.createRectangle(sprite.getWidth(), sprite.getHeight()));

playerBody2D.addFixture(bodyFixture);
playerBody2D.setMass(MassType.NORMAL);

geom.addControl(playerBody2D);
dyn4jAppState.getPhysicsSpace().addBody(playerBody2D);

GeometryUtilities es una clase auxiliar que evitar una confusión con el objeto-clase com.jme3.scene.Geometry (JME3) y org.dyn4j.geometry.Geometry (Dyn4j).

Clone this wiki locally