【问题标题】:Box2d Body to follow mouse movementBox2d Body 跟随鼠标移动
【发布时间】:2015-06-21 11:15:50
【问题描述】:

我正在尝试让 box2d 主体跟随鼠标旋转。这是一张图片来澄清我的意思。

红色和蓝色圆圈是鼠标的当前点和身体(相应颜色)移动/旋转跟随它。基本上,矩形应该旋转,其一端指向鼠标指针所在的位置。

这是我目前的代码,

 World world;
    Body body, bullet;
    Box2DDebugRenderer debugRenderer;
    OrthographicCamera camera;

    @Override
    public void create() {

        world = new World(new Vector2(0, 0f), true);
        debugRenderer = new Box2DDebugRenderer();
        float w = Gdx.graphics.getWidth();
        float h = Gdx.graphics.getHeight();

        BodyDef bodyDef = new BodyDef();
        bodyDef.type = BodyDef.BodyType.DynamicBody;
        bodyDef.position.set(10, 10);
        body = world.createBody(bodyDef);

        PolygonShape shape = new PolygonShape();
        shape.setAsBox(2, 5);
        FixtureDef fixtureDef = new FixtureDef();
        fixtureDef.shape = shape;
        fixtureDef.density = 1f;
        Fixture fixture = body.createFixture(fixtureDef);

        shape.dispose();

        Gdx.input.setInputProcessor(this);

        camera = new OrthographicCamera(200, 100 * (h / w));
        camera.position.set(camera.viewportWidth / 2f, camera.viewportHeight / 2f, 0);
        camera.update();

    }
 @Override
    public void render() {

        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        world.step(Gdx.graphics.getDeltaTime(), 6, 2);
        camera.update();
        debugRenderer.render(world, camera.combined);
    }

  @Override
    public boolean mouseMoved(int screenX, int screenY) {
        int mouseX = screenX;
        int mouseY = Gdx.graphics.getHeight() - screenY;
        float rotateAngle = MathUtils.radiansToDegrees * MathUtils.atan2((float) mouseY - (float) body.getPosition().y, (float) mouseX - (float) body.getPosition().x);
        body.setTransform(body.getPosition(), rotateAngle / 57.2957795f);
        return true;
    }

这是它现在的样子的 gif。

如您所见,身体歪斜了,也不能正确旋转。我错过了什么?

【问题讨论】:

    标签: libgdx box2d game-physics


    【解决方案1】:

    偏斜看起来像是方面校正的问题,试试吧,

    camera = OrthographicCamera(200, 100 * (w / h));
    

    甚至,

    camera = OrthographicCamera(200, 100);
    

    要让盒子的末端跟随鼠标如图所示,只需重新定义盒子,

    shape.setAsBox(5, 2, Vector2(offset, 0), 0);
    

    【讨论】:

      猜你喜欢
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2022-06-22
      相关资源
      最近更新 更多