box2d边界没有接壤

时间:2013-06-04 13:25:41

标签: ios cocos2d-iphone 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); 

}

3 个答案:

答案 0 :(得分:1)

如果您使用鼠标关节移动东西,请尝试将鼠标关节的collideConnected设置为true(默认值为false)。

答案 1 :(得分:0)

这可能有几个原因。可能导致问题的两个原因:

  • 您想要与边框碰撞的实体位于另一个碰撞组,而不是边框​​
  • 尝试为所有机构设置setBullet(true),因为您的问题可能是所谓的隧道效应

答案 2 :(得分:0)

听起来你的动态物品可能没有质量。 尝试在创建灯具后添加ResetMassData()。

如果这没有帮助,我仍然认为问题出在动态机构中。那么就需要生成代码。