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));
}

私が言及した「奇妙な動作」は、あたかもアンカーポイントのように、確立されたポイント(オブジェクトの幅の2倍の軌道)の周りに体を引き寄せるように見えるため、BodyBにアンカーポイントを確立する方法を探していました体の外にありました(六角形、ところで)。しかし、libgdx でこれを行う方法が見当たりません。

私が間違っていることを誰かが知っていますか?前もって感謝します!

4

1 に答える 1

0

さて、MouseJoint は正常に動作していましたが、MouseJoint の動作を誤解していました。

Box2d テストベッドで明確にわかるように、MouseJoint は、オブジェクトを選択した後のドラッグに使用されます。したがって、アンカーは最初の target.set で割り当てられます。

オブジェクトの中心をマウスがあった (またはユーザーが触れた) 場所に移動したかったのでmj_def.target.set(body.getPosition().x + 2.0f, body.getPosition().y + 1.0f);、初期化の a (オブジェクトは 4.0f x 2.0f) で問題は解決しました。また、私の意図 (特定のオブジェクトを画面内の 1 つの場所に移動する) には最適なジョイントではない可能性があります。

于 2011-08-24T17:32:44.127 に答える