2013-04-30 92 views
0

我用Box2D做了一些測試,並堅持使用它。 這裏是我的身體構造代碼:爲什麼Box2D身體不會碰撞?

 var bodyDef:b2BodyDef = new b2BodyDef(); 
     bodyDef.type = b2Body.b2_dynamicBody; 
     bodyDef.fixedRotation = true; 
     var center:Number = Consts.stageToB2(Consts.worldSize/2); 
     bodyDef.position.Set(center, center); 
 var body:b2Body = physicWorld.CreateBody(bodyDef); 

     var shape:b2CircleShape = new b2CircleShape(Consts.stageToB2(w) * 0.5); // our monster is in circle shape. 
     var fixtureDef:b2FixtureDef = new b2FixtureDef(); 
     fixtureDef.shape = shape; 

     body.CreateFixture(fixtureDef); 

我創造了這樣兩具屍體,但他們不衝突! debugDraw也不會照亮身體。但是當我爲它們中的一個添加角速度時:

body.SetAngularVelocity(Math.PI/89);

他們將開始相撞。你能解釋一下這裏發生了什麼?

回答

2

我有一種感覺,Box2D的不會對象避風港之間進行碰撞沒有施加任何力量。這似乎是合乎邏輯的,因爲如果引擎沒有做任何事情,引擎會浪費資源來檢查這些對象。

如果您將物體放置在彼此頂部,然後在沒有重力設置或施加任何力的情況下預期會發生某些情況,那可能是原因。

+0

我想模擬宇宙,所以在我的遊戲中沒有重力。我試圖通過改變它的位置來控制玩家的船。無論如何,當我按照你的建議使用武力時,他們確實相互衝突!所以在Box2D中,我必須始終使用力量或衝動,而不是直接設置身體的位置,對吧? – wanting252 2013-04-30 08:35:30

+1

@ wanting252是的,確保你施加力量,不要直接修改身體的位置。如果你這樣做,沒有速度等等,歸因於身體在碰撞中使用。基本上要創造一個現實的反應,你需要逼真的運動。實際生活中的物體在移動時不會突然傳送到新的x和y座標。 – Marty 2013-04-30 09:26:13

1

引力呢?如果他們不動可言,甚至不脫落,好像你沒有在你的世界重力..

private var gravity:b2Vec2 = new b2Vec2(0, 9.8); 
... 
private var your_world:b2World = new b2World(gravity, true) 
+0

是的,我的遊戲模擬宇宙的感覺,所以沒有重力。那麼在Box2D中引力是否必然會碰撞? – wanting252 2013-04-30 08:27:48

+1

絕對不是,但在這種情況下,你需要在你的身體上使用力量。如果沒有重力,身體上沒有力量 - 身體「睡覺」 – Cherniv 2013-04-30 08:31:23