Olá querido leitor! Eu já escrevi o
primeiro artigo com os princípios básicos do Box2D no
Eclipse em Java. Hoje, usando o exemplo do berço de Newton, mostrarei como configurar a conexão de objetos nesta maravilhosa biblioteca física.
O que esperamos ver?
Figura 1. Muito bom!
Definitivamente algo totalmente diferente disso!
Para conectar o
libGDX, consulte o
primeiro artigo.
A composição do projeto não mudou:
Figura 2. O projeto. Pastas e pacotes.
Adicionei o pacote Utils com a classe Constants à pasta Core, que contém apenas uma constante - o número de pixels por metro. Isso é para que o mundo não seja gigantesco.
Aqui está o código para a classe DesktopLauncher de com.mygdx.game.desktop:
Cole esse código na classe e esqueça-o.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();
Em nosso modelo físico, o coeficiente de elasticidade será de primordial importância. Quanto mais alto, mais oscilações o pêndulo fará. No Box2D, o parâmetro de restituição do FixtureDef pode assumir valores de 0 a 1.0f, onde 0 não é absolutamente elástico e 1.0f é absolutamente elástico. O melhor modelo do berço de Newton que obtive com restituição = 0.8f:
Figura 3 Coeficiente de elasticidade = 0.8f, para maior clareza, câmera lenta.
Código de implementação: 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();
Você pode alterar os coeficientes e obter resultados diferentes. Além disso, as texturas podem ser aplicadas às primitivas para obter maior realismo.
A seguir serão apresentadas imagens gif para vários valores do coeficiente de elasticidade.
Figura 4. Coeficiente de elasticidade igual a 1f.
Figura 5. Coeficiente de elasticidade igual a 0,5f.
Figura 6. Coeficiente de elasticidade igual a 0.2f.
Figura 7. Coeficiente de elasticidade igual a 0.
Existem muitas idéias, eu tento espalhar os resultados o mais longe possível! Obrigado por ler até o final, espero que o artigo tenha sido útil para você! Vamos reunir o verdadeiro caos no mundo do jogo, graças à biblioteca Box2D!
PS Vou responder a todas as perguntas nos comentários.