2012-02-01 22 views
0

我使用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

Initialize()的最後2個參數指定世界座標中的關節的兩個錨點,一個在body0上,一個在body1上。我不確定你想用矢量blobCenter來實現什麼,但是這兩個錨點(將它們想象成你正在創建的連接點的兩個端點)在技術上不應該是相同的。

一開始,嘗試:

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

這將建立一個距離約束=初始停止距離創建2個機構之間,而這個距離將通過聯合隨後維持。

world->CreateJoint(&jointDef); 

最後但並非最不重要的,在你的代碼的末尾添加聯合向世界