用距离关节连接两个圆圈

时间:2012-02-01 02:21:48

标签: cocos2d-iphone

我正在使用cocos2d和box2d,我正在尝试生成2个圆圈,我用这个代码做了

b2BodyDef bodyDef[2];
b2Body *body[2];

for (int i=0; i<=1; i++) 
{
    bodyDef[i].type = b2_dynamicBody;
    bodyDef[i].position.Set(((i+1)*blobSize)/PTM_RATIO,((i+1)*blobSize)/PTM_RATIO);
    body[i] = world->CreateBody(&bodyDef[i]);

    // Define another box shape for our dynamic body.
    b2CircleShape circle;
    circle.m_radius = (blobSize)/PTM_RATIO;

    // Define the dynamic body fixture.
    b2FixtureDef fixtureDef;
    fixtureDef.shape = &circle; 
    fixtureDef.density = 1.0f;
    fixtureDef.friction = 0.4f;
    fixtureDef.restitution = 0.2f;
    body[i]->CreateFixture(&fixtureDef);
}

该代码完美无瑕地工作......然后我直接输入了我的代码来制作看起来像这样的距离

//Finding Midpoint of the circle
b2Vec2 blobCenter;
blobCenter.x = blobSize/2;
blobCenter.y = blobSize/2;

b2DistanceJointDef jointDef;

jointDef.Initialize(body[0], body[1],blobCenter, blobCenter);

jointDef.collideConnected = true;

此代码编译时没有错误,但是当执行时发生与以前相同的事情,只生成2个cirlces但它们没有附加关节

1 个答案:

答案 0 :(得分:1)

Initialize()的最后2个参数指定世界坐标中关节的两个锚点,一个在body0上,另一个在body1上。我不确定你想要用矢量blobCenter实现什么,但是这两个锚点(将它们视为你正在创建的关节的2个端点)在技术上应该不一样。

首先,请尝试:

jointDef.Initialize(body[0], body[1], body[0]->GetWorldCenter(), body[1]->GetWorldCenter());

这将设置距离约束=您创建的2个实体之间的初始静止距离,此距离将由关节保持。

最后但并非最不重要的是,在代码末尾将关节添加到世界中:

world->CreateJoint(&jointDef);