0

我一直在尝试使用 MouseJoint 在用户触摸的任何地方移动一块。但是这件作品受到关节的影响,表现得很奇怪,从未达到目的。这是代码(x 和 y 已经转换为“物理”单位):

MouseJointDef mj_def;
MouseJoint mj = null;
Body mj_gbody;

public void move(float x, float y)
{
    if(mj == null)
    {
        BodyDef mgbd = new BodyDef();
        mj_gbody = wrld.createBody(mgbd);
        //
        mj_def = new MouseJointDef();
        mj_def.bodyA = mj_gbody;
        mj_def.bodyB = body;
        mj_def.collideConnected = true;
        mj_def.maxForce = 20.0f * body.getMass();
        //mj_def.target.set(x,y);

        mj = (MouseJoint)wrld.createJoint(mj_def);
        body.setAwake(true);
    }

    mj.setTarget(new Vector2(x, y));
}

我正在寻找某种方法来在 BodyB 中建立锚点,因为我提到的“奇怪行为”似乎使身体围绕已建立的点(轨道宽度是物体宽度的两倍)引力,好像锚点在身体外面(六边形,顺便说一句)。但是我在 libgdx 中看不到任何这样做的方法。

有人知道我做错了什么吗?先感谢您!

4

1 回答 1

0

好吧,MouseJoint 工作正常,我只是误解了 MouseJoint 的工作原理。

正如在 Box2d 测试平台中清楚地看到的那样,MouseJoint 用于在选择对象后进行拖动。因此,anchor 是在第一个 target.set 中分配的。

由于我想将对象的中心移动到鼠标所在的位置(或用户触摸的位置),mj_def.target.set(body.getPosition().x + 2.0f, body.getPosition().y + 1.0f);初始化中的 a(对象为 4.0f x 2.0f)解决了问题。此外,它可能不是我意图的最佳关节(将特定对象移动到屏幕中的一个位置)。

于 2011-08-24T17:32:44.127 回答