2013-06-04 215 views
0

我爲我的遊戲創建了box2d邊框,並注意到我實際上可以將我的身體滑過邊框。box2d邊框不接壤

如果我把它們扔在邊界上,它們會從中反彈回來。但是當我慢慢地將它們移向它時,它們只是通過。有時,當我有幾個身體與RevoluteJoint連接時,關節實際上會纏繞在邊界並停止滑動。但是,當不加入時,邊界不會阻止身體/精靈。

現在,我只在模擬器上測試它,並且沒有用於測試的iPad。那麼這個問題是否連接到模擬器?礦井運行速度約爲30fps。

如果它不是一個模擬器的問題,有沒有解決方案?

我正在使用的代碼是你可以隨處找到的一個(修改了一下適合我的需要:)

b2BodyDef groundBodyDef; 
groundBodyDef.position.Set(0,0); 
_groundBody = _world->CreateBody(&groundBodyDef); 
_groundBody->SetType(b2_staticBody); 


b2EdgeShape groundEdge; 
b2FixtureDef boxShapeDef; 
boxShapeDef.shape = &groundEdge; 

//wall definitions 
groundEdge.Set(b2Vec2(-winSize.width/PTM_RATIO, (float)20/PTM_RATIO), b2Vec2((winSize.width)/PTM_RATIO, (float)20/PTM_RATIO)); // bottom wall 
_groundBody->CreateFixture(&boxShapeDef); 

groundEdge.Set(b2Vec2(-winSize.width/PTM_RATIO, (winSize.height-50)/PTM_RATIO), b2Vec2(winSize.width/PTM_RATIO, (winSize.height-50)/PTM_RATIO)); // top wall 
_groundBody->CreateFixture(&boxShapeDef); 

groundEdge.Set(b2Vec2(-(winSize.width-20)/PTM_RATIO,0), b2Vec2(-(winSize.width-20)/PTM_RATIO, winSize.height/PTM_RATIO)); // left wall 
_groundBody->CreateFixture(&boxShapeDef); 

groundEdge.Set(b2Vec2((winSize.width-20)/PTM_RATIO, winSize.height/PTM_RATIO), b2Vec2((winSize.width-20)/PTM_RATIO, 0)); // right wall 
_groundBody->CreateFixture(&boxShapeDef); 

} 

回答

1

如果您使用鼠標關節來移動東西,請嘗試將鼠標關節的collideConnected設置爲true(默認值爲false)。

+0

你明白了,@ iforce2d。謝謝! – Eddy

+0

實際上,現在當我將身體推向邊界時,他們有時會開始發抖。當身體的兩個不同的固定裝置在兩個不同的位置撞擊牆壁時會發生這種情況。我認爲這與邊界本身無關,因爲當兩個不同的碰撞物體碰撞時也會發生這種情況。而且這似乎是「正常的」,因爲壓力點正從一個夾具移動到另一個夾具,所以發生搖動效應。但顯然這是一種不需要的行爲。有解決方案嗎? – Eddy

+1

我不認爲有什麼辦法可以避免這種情況,除了可能會降低鼠標關節的強度。我並不確定,但我猜測在某些時候,如果鼠標關節的力量較弱,身體就會沉降,而不是連續被抓住在鼠標關節想要去的地方以及邊界想要的地方走。 – iforce2d

0

這可能有幾個原因。可能導致的問題有兩個原因:你想與邊框碰撞

  • 的屍體是在另一碰撞組比邊界是
  • 嘗試設置setBullet(true)所有機構作爲你的問題可能是所謂的隧道效應
0

聽起來像您的動態對象可能沒有質量。 嘗試在創建燈具後添加ResetMassData()。

如果這沒有幫助,我仍然認爲問題是在動態的身體。生成代碼是必需的。