2013-04-30 105 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