1
我在Box2D的兩個圓弧形的動態物體,無論是通過調用這個程序:對象甚至穿透子彈模式
Disk *World::AddDisk(float32 x, float32 y, float32 radius, float32 density) {
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(x, y);
bodyDef.bullet = true;
b2Body *body = this->world.CreateBody(&bodyDef);
b2CircleShape shape;
shape.m_p.Set(0, 0);
shape.m_radius = radius;
b2FixtureDef fixtureDef;
fixtureDef.shape = &shape;
fixtureDef.density = density;
fixtureDef.restitution = 0.8;
b2Fixture *fixture = body->CreateFixture(&fixtureDef);
Disk *d = new Disk(this, body, fixture);
this->disks.push_back(d);
return d;
}
這些是創造我的兩個圓的呼叫:
world.AddDisk(0, 0, 10, 5.97219e+12);
world.AddDisk(20, 20, 5, 1);
我嘗試通過在重力爲零的同時對其中一個施加一定的力量而將其移動到較小的圓盤上。這些圓圈滲入了一個明顯的數量(雖然不是太小)。
我也嘗試使用正常重力,將較大的圓的重力縮放爲零。另一個正常移動,但是在一小段穿透之後它又被擊退了。
是不是子彈模式(即CCD)應該消除滲透?起初,我認爲這些圈子滲透的原因是我對一個人施加了一個持續的力量,而他們碰觸時沒有考慮到正常的力量。但後來我看到Box2D的引力也一樣。有什麼想法發生在這裏?
我改變了羣衆,使他們接近;沒有明顯的變化。也使更大的磁盤成爲一個靜態主體;還是一樣。無論如何,我認爲尺寸需要接近,而不是羣衆。我想模擬一些行星間物理。你是說我最好推出自己的? (我一開始就部分推出了自己的產品,然後我認爲我會使用Box2D。) – Elektito
我想這可能是你最初懷疑的不變的力量。如果你推出自己的產品,你會遇到同樣的問題......當然這可能是一個有趣的解決方案。 – jhoffman0x
我現在對這種混淆事實上持懷疑態度,因爲Box2D的正常引力必須是相同的 - 它對較小的磁盤施加一定的力(較大的磁盤被縮放爲零)。 – Elektito