Bonjour cher lecteur! J'ai déjà écrit le
premier article avec les bases de Box2D dans
Eclipse en Java. Aujourd'hui, en utilisant l'exemple du berceau de Newton, je vais montrer comment configurer la connexion des objets dans cette merveilleuse bibliothèque physique.
Qu'attendons-nous de voir?
Figure 1. Trop bien!
Certainement quelque chose de totalement différent de ça!
Pour connecter
libGDX, consultez le
premier article.
La composition du projet n'a pas changé:
Figure 2. Le projet. Dossiers et packages.
J'ai ajouté le package Utils avec la classe Constants au dossier Core, qui ne contient qu'une seule constante - le nombre de pixels par mètre. C'est ainsi que le monde n'est pas gigantesque.
Voici le code de la classe DesktopLauncher de com.mygdx.game.desktop:
Collez ce code dans la classe et oubliez-le.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();
Dans notre modèle physique, le coefficient d'élasticité sera de première importance. Plus il est élevé, plus le pendule fera d'oscillations. Dans Box2D, le paramètre de restitution de FixtureDef peut prendre des valeurs de 0 à 1.0f, où 0 n'est absolument pas élastique et 1.0f est absolument élastique. Le meilleur modèle de berceau de Newton que j'ai obtenu avec restitution = 0,8f:
Figure 3 Coefficient d'élasticité = 0,8f, pour plus de clarté, ralenti.
Code de mise en œuvre: 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();
Vous pouvez modifier les coefficients vous-même et obtenir des résultats différents. De plus, des textures peuvent être appliquées aux primitives pour obtenir un plus grand réalisme.
Ensuite seront présentées des images gif pour différentes valeurs du coefficient d'élasticité.
Figure 4. Coefficient d'élasticité égal à 1f.
Figure 5. Coefficient d'élasticité égal à 0,5f.
Figure 6. Coefficient d'élasticité égal à 0,2f.
Figure 7. Coefficient d'élasticité égal à 0.
Il y a beaucoup d'idées, j'essaie de diffuser le plus possible les résultats! Merci d'avoir lu jusqu'au bout, j'espère que l'article vous a été utile! Rassemblons le vrai chaos dans le monde du jeu grâce à la bibliothèque Box2D!
PS Je répondrai à toutes les questions dans les commentaires.