Hola querido lector! Ya escribí el
primer artículo con los conceptos básicos de Box2D en
Eclipse en Java. Hoy, usando el ejemplo de la Cuna de Newton, mostraré cómo configurar la conexión de objetos en esta maravillosa biblioteca física.
¿Qué esperamos ver?
Figura 1. Demasiado bueno!
¡Definitivamente algo totalmente diferente a eso!
Para conectar
libGDX, vea el
primer artículo.
La composición del proyecto no ha cambiado:
Figura 2. El proyecto. Carpetas y paquetes.
Agregué el paquete Utils con la clase Constantes a la carpeta Core, que contiene solo una constante: la cantidad de píxeles por metro. Esto es para que el mundo no sea gigantesco.
Aquí está el código para la clase DesktopLauncher de com.mygdx.game.desktop:
Pega este código en la clase y olvídalo.package com.mygdx.game.desktop; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; import com.mygdx.game.MyGdxGame; public class DesktopLauncher { public static void main(String[] arg) { LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
En nuestro modelo físico, el coeficiente de elasticidad será de primordial importancia. Cuanto más alto sea, más oscilaciones hará el péndulo. En Box2D, el parámetro de restitución de FixtureDef puede tomar valores de 0 a 1.0f, donde 0 es absolutamente no elástico y 1.0f es absolutamente elástico. El mejor modelo de la Cuna de Newton que obtuve con restitución = 0.8f:
Figura 3 Coeficiente de elasticidad = 0.8f, para mayor claridad, cámara lenta.
Código de Implementación: package com.mygdx.game; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.BodyDef; import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; import com.badlogic.gdx.physics.box2d.CircleShape; import com.badlogic.gdx.physics.box2d.FixtureDef; import com.badlogic.gdx.physics.box2d.PolygonShape; import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.physics.box2d.joints.RevoluteJointDef; import utils.Constants; public class MyGdxGame extends ApplicationAdapter { private OrthographicCamera camera; private boolean DEBUG = false; private World world; private Body plos; private Body plos2; private Body plos3; private Body plos1; private Body plos4; private Box2DDebugRenderer b2dr; private Body ball; private Body ball1; private Body ball2; private Body ball3; private Body ball4; public void create() { float w = Gdx.graphics.getWidth(); float h = Gdx.graphics.getHeight(); camera = new OrthographicCamera(); camera.setToOrtho(false, w / 2, h / 2); world = new World(new Vector2(0, -9.8f), false); b2dr = new Box2DDebugRenderer();
Puede cambiar los coeficientes usted mismo y obtener resultados diferentes. Además, las texturas se pueden aplicar a las primitivas para lograr un mayor realismo.
A continuación se presentarán imágenes gif para varios valores del coeficiente de elasticidad.
Figura 4. Coeficiente de elasticidad igual a 1f.
Figura 5. Coeficiente de elasticidad igual a 0.5f.
Figura 6. Coeficiente de elasticidad igual a 0.2f.
Figura 7. Coeficiente de elasticidad igual a 0.
¡Hay muchas ideas, trato de difundir los resultados lo más posible! Gracias por leer hasta el final, ¡espero que el artículo te haya sido útil! ¡Unamos el verdadero caos en el mundo del juego gracias a la biblioteca Box2D!
PD : responderé todas las preguntas en los comentarios.