مرحبا عزيزي القارئ! لقد كتبت بالفعل المقال
الأول مع أساسيات Box2D في
Eclipse في Java. اليوم ، باستخدام مثال Newton's Cradle ، سأعرض كيفية تكوين اتصال الكائنات في هذه المكتبة المادية الرائعة.
ماذا نتوقع أن نرى؟
الشكل 1. جيد جدا!
بالتأكيد شيء مختلف تماما عن ذلك!
لتوصيل
libGDX ، راجع المقال
الأول .
لم يتغير تكوين المشروع:
الشكل 2. المشروع. المجلدات والحزم.
أضفت حزمة Utils مع فئة الثوابت إلى المجلد Core ، والذي يحتوي على ثابت واحد فقط - عدد البكسل لكل متر. هذا هو أن العالم ليس عملاقا.
فيما يلي رمز فئة DesktopLauncher من com.mygdx.game.desktop:
الصق هذا الرمز في الفصل ونسيانه.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();
في نموذجنا المادي ، سيكون لمعامل المرونة أهمية أساسية. وكلما زاد ذلك ، زادت التذبذبات التي سيحدثها البندول. في Box2D ، يمكن لمعلمة الاسترداد الخاصة بـ FixtureDef أن تأخذ قيمًا من 0 إلى 1.0f ، حيث 0 ليست مرنة تمامًا ، و 1.0f مرنة تمامًا. أفضل نموذج لنيوتن كرادل حصلت عليه مع الرد = 0.8f:
الشكل 3 معامل المرونة = 0.8f ، لمزيد من الوضوح ، حركة بطيئة.
كود التنفيذ: 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();
يمكنك تغيير المعاملات بنفسك والحصول على نتائج مختلفة. بالإضافة إلى ذلك ، يمكن تطبيق القوام على البدائية لتحقيق قدر أكبر من الواقعية.
سيتم تقديم صور GIF التالية للقيم المختلفة لمعامل المرونة.
الشكل 4. معامل المرونة يساوي 1F.
الشكل 5. معامل مرونة يساوي 0.5f.
الشكل 6. معامل المرونة يساوي 0.2f.
الشكل 7. معامل المرونة يساوي 0.
هناك الكثير من الأفكار ، وأحاول نشر النتائج إلى أقصى حد ممكن! شكرا لك على القراءة حتى النهاية ، وآمل أن تكون المقالة مفيدة لك! دعونا نجمع الفوضى الحقيقية في عالم الألعاب بفضل مكتبة Box2D!
PS سأجيب على جميع الأسئلة في التعليقات.