0

Box2Dを使用して、ユーザーがオブジェクトをドラッグし、事前定義された場所に「固定」できる小さな世界をシミュレートしています(基本的には特定の位置に「ロック」します)。

オブジェクトをある位置にロックするためのこのコードがあります。SetPosition(またはSetTransform)を機能させることができないことを除いて、すべてが機能します。オブジェクトを(0,0)に移動するだけです。

参考までに、世界はEaselJSを使用して描画されます。

// checks if mouse is dragging the object nearby one of the containers
if( isWithin(mouseX, mouseY, containers) ) {

    // make object 'straight'
    body.SetAngularVelocity(0);
    body.SetAngle(0);

    // makes the object a kinetic body
    body.SetType(b2Body.b2_kineticBody);

    // doesn't work. it always moves the object to (0,0)
    body.SetPosition(5,5); // I am using (5,5) for simplicity
                           // it should have the coordinates of the center of the container
    // alternative: (also doesn't work)
    //body.SetTransform(b2Vec2(5,5), body.GetAngle());
}

私は何が間違っているのですか?

4

2 に答える 2

0

あなたのコードは私には問題ないようです。これが私のアプリからの動的ボディのコードです。あなたの場合、それが理にかなっているのかどうかわかりません。

        b2Vec2 delta = that->settings->initPos - that->ballBody->GetPosition();
        delta *= that->ballBody->GetMass();
        that->ballBody->ApplyLinearImpulse(delta, that->ballBody->GetPosition());
于 2012-09-26T23:13:29.180 に答える