Hallo lieber Leser! Ich habe bereits den
ersten Artikel mit den Grundlagen von Box2D in
Eclipse in Java geschrieben. Heute werde ich am Beispiel von Newtons Wiege zeigen, wie die Verbindung von Objekten in dieser wunderbaren physischen Bibliothek konfiguriert wird.
Was erwarten wir zu sehen?
Abbildung 1. Zu gut!
Auf jeden Fall etwas ganz anderes!
Informationen zum Verbinden von
libGDX finden Sie im
ersten Artikel.
Die Zusammensetzung des Projekts hat sich nicht geändert:
Abbildung 2. Das Projekt. Ordner und Pakete.
Ich habe das Utils-Paket mit der Constants-Klasse zum Core-Ordner hinzugefügt, der nur eine Konstante enthält - die Anzahl der Pixel pro Meter. Dies ist so, dass die Welt nicht gigantisch ist.
Hier ist der Code für die DesktopLauncher-Klasse von com.mygdx.game.desktop:
Fügen Sie diesen Code in die Klasse ein und vergessen Sie ihn.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();
In unserem physikalischen Modell wird der Elastizitätskoeffizient von vorrangiger Bedeutung sein. Je höher es ist, desto mehr Schwingungen macht das Pendel. In Box2D kann der Restitutionsparameter von FixtureDef Werte von 0 bis 1,0f annehmen, wobei 0 absolut nicht elastisch und 1,0f absolut elastisch ist. Das beste Modell von Newtons Wiege, das ich mit Restitution bekommen habe = 0.8f:
Abbildung 3 Elastizitätskoeffizient = 0,8 f, für mehr Klarheit, Zeitlupe.
Implementierungscode: 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();
Sie können die Koeffizienten selbst ändern und unterschiedliche Ergebnisse erzielen. Darüber hinaus können Texturen auf Grundelemente angewendet werden, um einen größeren Realismus zu erzielen.
Als nächstes werden GIF-Bilder für verschiedene Werte des Elastizitätskoeffizienten präsentiert.
Abbildung 4. Elastizitätskoeffizient gleich 1f.
Abbildung 5. Elastizitätskoeffizient gleich 0,5f.
Abbildung 6. Elastizitätskoeffizient gleich 0,2f.
Abbildung 7. Elastizitätskoeffizient gleich 0.
Es gibt viele Ideen, ich versuche die Ergebnisse so weit wie möglich zu verbreiten! Vielen Dank für das Lesen bis zum Ende, ich hoffe, der Artikel war nützlich für Sie! Lassen Sie uns dank der Box2D-Bibliothek echtes Chaos in der Spielwelt zusammenbringen!
PS Ich werde alle Fragen in den Kommentaren beantworten.