2 votes

Libgdx Box2D Velocity n'est pas assez rapide

J'ai un rectangle que je voudrais déplacer rapidement, mais pour une raison quelconque, la vitesse la plus rapide que j'utilise semble toujours lente. Qu'est-ce que je fais de mal ? J'ai également laissé tomber un cercle d'en haut sur une surface et même si je joue avec la gravité, il retombe comme un ballon...

Quelques déclarations

float velocity = 10000000f;
static final float BOX_STEP=1/60f;  
static final int BOX_VELOCITY_ITERATIONS=6;  
static final int BOX_POSITION_ITERATIONS=2;  

Gravité, j'ai tout essayé et ils semblent tous craindre.

world = new World(new Vector2(0, -50), true) ;

Le sol sur lequel mon objet se déplace

    //ground
    BodyDef groundBodyDef =new BodyDef();  
    groundBodyDef.position.set(new Vector2(0, camera.viewportHeight * .08f));  
    Body groundBody = world.createBody(groundBodyDef);  
    PolygonShape groundBox = new PolygonShape();  
    groundBox.setAsBox((camera.viewportWidth) * 2, camera.viewportHeight * .08f);  
    groundBody.createFixture(groundBox, 0.0f);   

Et puis voici mes objets :

    //ball
    bodyDef = new BodyDef();  
    bodyDef.type = BodyType.DynamicBody;  
    bodyDef.position.set(new Vector2(camera.viewportWidth * .2f, camera.viewportHeight * .75f));  
    body = world.createBody(bodyDef);  
    CircleShape dynamicCircle = new CircleShape();  
    dynamicCircle.setRadius(camera.viewportWidth * .035f);  
    FixtureDef fixtureDef = new FixtureDef();  
    fixtureDef.shape = dynamicCircle;  
    fixtureDef.density = 0.5f;  
    fixtureDef.friction = 0.5f;  
    fixtureDef.restitution = 0.8f;  
    body.createFixture(fixtureDef); 
    body.setLinearVelocity(0,-100);

    //slime boy
    BodyDef bodyBoxDef = new BodyDef();  
    bodyBoxDef.type = BodyType.DynamicBody;  
    bodyBoxDef.position.set(new Vector2(camera.viewportWidth * .08f,camera.viewportHeight * .191f));  
    bodyBox = world.createBody(bodyBoxDef);  
    PolygonShape slimeBox = new PolygonShape();  
    slimeBox.setAsBox(camera.viewportWidth * .04f, camera.viewportHeight * .03f);
    FixtureDef fixtureSlimeDef = new FixtureDef();  
    fixtureSlimeDef.shape = slimeBox;  
    fixtureSlimeDef.density = 1.0f;  
    fixtureSlimeDef.friction = 0.0f;  
    fixtureSlimeDef.restitution = 0.0f;  
    bodyBox.createFixture(fixtureSlimeDef);  

    debugRenderer = new Box2DDebugRenderer(); 

    body.applyTorque(1000000000);
    bodyBox.setFixedRotation(true);
    bodyBox.setBullet(true);

Quelqu'un a-t-il des suggestions pour accélérer tous les mouvements dans ce domaine ?

J'ai utilisé un écran 1280 par 720 mais j'ai vu dans d'autres sources que plus c'est petit mieux c'est pourquoi j'ai réduit à 640 par 260 mais toujours pas la performance que je veux. Quelle taille dois-je vraiment choisir ?

6voto

P.T. Points 12158

Desde el Manuel de Box2d (section 2.2) :

Box2D est réglé pour les mètres, les kilogrammes et les secondes. Vous pouvez donc considérer que les étendues sont en mètres. Box2D fonctionne généralement mieux lorsque les objets sont de la taille d'objets typiques du monde réel. Par exemple, un baril mesure d'environ 1 mètre. En raison des limitations de l'arithmétique en virgule flottante à virgule flottante, l'utilisation de Box2D pour modéliser le mouvement des glaciers ou des particules de poussière n'est pas une bonne idée.

Voir https://stackoverflow.com/a/4556714/960524

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X