我爲我的遊戲創建了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);
}
你明白了,@ iforce2d。謝謝! – Eddy
實際上,現在當我將身體推向邊界時,他們有時會開始發抖。當身體的兩個不同的固定裝置在兩個不同的位置撞擊牆壁時會發生這種情況。我認爲這與邊界本身無關,因爲當兩個不同的碰撞物體碰撞時也會發生這種情況。而且這似乎是「正常的」,因爲壓力點正從一個夾具移動到另一個夾具,所以發生搖動效應。但顯然這是一種不需要的行爲。有解決方案嗎? – Eddy
我不認爲有什麼辦法可以避免這種情況,除了可能會降低鼠標關節的強度。我並不確定,但我猜測在某些時候,如果鼠標關節的力量較弱,身體就會沉降,而不是連續被抓住在鼠標關節想要去的地方以及邊界想要的地方走。 – iforce2d