我只使用 Box2D 进行碰撞检测。我的代码类似于 Ray Wenderlich 的教程 here 中的代码.
我遇到了这个方法的问题。由于代码绕过了 Box2D 模拟,因此没有碰撞响应。因此, Sprite 可以重叠。我知道 Box2D 碰撞 API 提供了一个单位法线向量来帮助解决碰撞。然而,这个向量传达方向而不是幅度。因此,我无法确定应该将重叠的 Sprite 移动多远。有谁知道如何使用 Box2D 碰撞 API 手动解决重叠问题?
我不知道 iOS 的东西,但你想做的是使用扩展 b2ContactListener 并覆盖 PreSolve。
void PreSolve(b2Contact* contact, const b2Manifold* oldManifold);
如果你设置了contact->SetEnabled(false) 你会发生碰撞但是它不会被处理。一旦发生碰撞,您可以执行类似于以下的操作。
const b2Manifold* 歧管 = contact->GetManifold();
if (manifold->m_pointCount == 0)
{
return;
}
b2Fixture* fixtureA = contact->GetFixtureA();
b2Fixture* fixtureB = contact->GetFixtureB();
b2PointState state1[b2_maxManifoldPoints], state2[b2_maxManifoldPoints];
b2GetPointStates(state1, state2, oldManifold, manifold);
b2WorldManifold worldManifold;
contact->GetWorldManifold(&worldManifold);
for (int32 i = 0; i < manifold->m_pointCount && m_pointCount < k_maxContactPoints; ++i)
{
ContactPoint* cp = m_points + m_pointCount;
cp->fixtureA = fixtureA;
cp->fixtureB = fixtureB;
cp->position = worldManifold.m_points[i];
cp->normal = worldManifold.m_normal;
cp->state = state2[i];
++m_pointCount;
}
关于ios - Box2D 仅用于碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16309280/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |