0

我正在为我的游戏创建一个 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); 

}
4

3 回答 3

1

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

于 2013-06-08T13:32:40.520 回答
0

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

  • 您要与边界碰撞的物体位于与边界不同的另一个碰撞组
  • 尝试setBullet(true)为所有物体设置,因为您的问题可能是所谓的隧道效应
于 2013-06-04T13:30:41.927 回答
0

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

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

于 2013-06-07T14:40:36.753 回答