我正在使用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但它们没有附加关节
答案 0 :(得分:1)
Initialize()的最后2个参数指定世界坐标中关节的两个锚点,一个在body0上,另一个在body1上。我不确定你想要用矢量blobCenter实现什么,但是这两个锚点(将它们视为你正在创建的关节的2个端点)在技术上应该不一样。
首先,请尝试:
jointDef.Initialize(body[0], body[1], body[0]->GetWorldCenter(), body[1]->GetWorldCenter());
这将设置距离约束=您创建的2个实体之间的初始静止距离,此距离将由关节保持。
最后但并非最不重要的是,在代码末尾将关节添加到世界中:
world->CreateJoint(&jointDef);