libGDX Box2d ApplyTorque() funktioniert nicht

temi

Top Contributor
Hallo zusammen,
ich experimentiere gerade etwas mit Box2d herum und möchte den Körper rotieren. Mit den auskommentierten Zeilen funktioniert es, mit applyTorque() nicht. Was mache ich falsch?
Java:
public class PhysicsModel
{
    private final World world = new World(new Vector2(0,0), true);
    private Body body;
    private final KeyboardController keyboardController;
    private float torque = 0;

    public PhysicsModel(final KeyboardController controller)
    {
        this.keyboardController = controller;

        BodyDef bodyDef = new BodyDef();
        bodyDef.type = BodyDef.BodyType.DynamicBody;
        bodyDef.position.set(0,0);

        body = world.createBody(bodyDef);

        PolygonShape shape = new PolygonShape();
        shape.setAsBox(2,1);

        FixtureDef fixtureDef = new FixtureDef();
        fixtureDef.shape = shape;
        fixtureDef.density = 1f;

        body.createFixture(shape, 0.0f);

        shape.dispose();
    }

    public World getWorld()
    {
        return world;
    }

    public void step(float delta)
    {
        if(keyboardController.isLeft())
        {
            torque += 0.1f;
            //body.setTransform(body.getPosition(), body.getAngle() + 0.01f);
        }

        if(keyboardController.isRight())
        {
            torque -= 0.1f;
            //body.setTransform(body.getPosition(), body.getAngle() - 0.01f);
        }

        if(keyboardController.isUp())
        {
            Vector2 vec = new Vector2((float)Math.cos(body.getAngle()), (float)Math.sin(body.getAngle()));

            body.applyForceToCenter(vec, true);
        }

        body.applyTorque(torque, true);

        world.step(delta, 3, 3);
    }

    @Override
    protected void finalize() throws Throwable
    {
        world.dispose();

        super.finalize();
    }
}
Java:
public class PhysicsModel
{
    private final World world = new World(new Vector2(0,0), true);
    private Body body;
    private final KeyboardController keyboardController;
    private float torque = 0;

    public PhysicsModel(final KeyboardController controller)
    {
        this.keyboardController = controller;

        BodyDef bodyDef = new BodyDef();
        bodyDef.type = BodyDef.BodyType.DynamicBody;
        bodyDef.position.set(0,0);

        body = world.createBody(bodyDef);

        PolygonShape shape = new PolygonShape();
        shape.setAsBox(2,1);

        FixtureDef fixtureDef = new FixtureDef();
        fixtureDef.shape = shape;
        fixtureDef.density = 1f;

        body.createFixture(shape, 0.0f);

        shape.dispose();
    }

    public World getWorld()
    {
        return world;
    }

    public void step(float delta)
    {
        if(keyboardController.isLeft())
        {
            torque += 0.1f;
            //body.setTransform(body.getPosition(), body.getAngle() + 0.01f);
        }

        if(keyboardController.isRight())
        {
            torque -= 0.1f;
            //body.setTransform(body.getPosition(), body.getAngle() - 0.01f);
        }

        if(keyboardController.isUp())
        {
            Vector2 vec = new Vector2((float)Math.cos(body.getAngle()), (float)Math.sin(body.getAngle()));

            body.applyForceToCenter(vec, true);
        }

        body.applyTorque(torque, true);

        world.step(delta, 3, 3);
    }

    @Override
    protected void finalize() throws Throwable
    {
        world.dispose();

        super.finalize();
    }
}

Zur Vervollständigung noch die render Methode:
Java:
    @Override
    public void render ()
    {
        physics.step(Gdx.graphics.getDeltaTime());

        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        debugRenderer.render(physics.getWorld(), camera.combined);
    }
 

temi

Top Contributor
Ok, ich habe den Fehler gefunden. Der Code war teilweise von einem Tutorial herauskopiert und ist hier (zumindest für meinen Fall) fehlerhaft:
Java:
        FixtureDef fixtureDef = new FixtureDef();
        fixtureDef.shape = shape;
        fixtureDef.density = 1f; // Masse

        body.createFixture(shape, 0.0f); // verwendet die fixtureDef nicht und überschreibt die Masse mit Null.
Ohne Masse kein Drehmoment.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Libgdx - Wiedergabe von Bildschirmgröße ist falsch Spiele- und Multimedia-Programmierung 0
L LibGDX - Verschiedene Layouts bei Android / Desktop Spiele- und Multimedia-Programmierung 1
L LibGDX - Ordentliche Größenänderung Spiele- und Multimedia-Programmierung 2
J (Libgdx) animation nur einmal in einem Event aufrufen Spiele- und Multimedia-Programmierung 1
G [Java/KryoNet/LibGDX] Mutliplayer Packet Frage Spiele- und Multimedia-Programmierung 2
J Kollision (libgdx) Spiele- und Multimedia-Programmierung 2
V Ist LibGDX bei der aktuellen Oracle-Strategie noch die richtige Wahl? Spiele- und Multimedia-Programmierung 9
G [LibGDX/Java] ArrayList Object Speicher Spiele- und Multimedia-Programmierung 3
H LibGdx SocketExeption: Connection reset Spiele- und Multimedia-Programmierung 1
G LIBGDX Texturen Problem Spiele- und Multimedia-Programmierung 1
G LIBGDX Problem beim resizen des Frames Spiele- und Multimedia-Programmierung 3
Kim_Dotcom libGDX - opengl Fehler Spiele- und Multimedia-Programmierung 5
G LIBGDX Viewport Problem Spiele- und Multimedia-Programmierung 3
G Component System Java 2D Game LibGDX Spiele- und Multimedia-Programmierung 6
G [LibGDX] Button Klick Probleme Spiele- und Multimedia-Programmierung 1
K LibGdx, Loadingscreen & Opengl context Spiele- und Multimedia-Programmierung 3
TreCore Render Texture in libGDX Spiele- und Multimedia-Programmierung 5
K [LibGDX] Alphakanal übernehmen Spiele- und Multimedia-Programmierung 1
W [libGDX] findet SplashScreen.png nicht Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben