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 回答
0

尝试使用

body->SetTransform(b2Vec2(5,5), body->GetAngle());
于 2016-11-15T16:53:10.483 回答