MouseJoint无法正常工作

时间:2011-08-24 08:45:22

标签: android box2d libgdx

我一直在尝试使用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中这样做的任何方法。

有人知道我做错了什么吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

在Box2d测试平台中可以清楚地看到,MouseJoint用于在选择对象后进行拖动。因此,锚点在第一个target.set中分配。

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