我正在为我的游戏创建一个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);
}
答案 0 :(得分:1)
如果您使用鼠标关节移动东西,请尝试将鼠标关节的collideConnected设置为true(默认值为false)。
答案 1 :(得分:0)
这可能有几个原因。可能导致问题的两个原因:
setBullet(true)
,因为您的问题可能是所谓的隧道效应 答案 2 :(得分:0)
听起来你的动态物品可能没有质量。 尝试在创建灯具后添加ResetMassData()。
如果这没有帮助,我仍然认为问题出在动态机构中。那么就需要生成代码。