2
我僅將Box2D用於碰撞檢測。我的代碼類似於Ray Wenderlich的教程here。Box2D僅適用於碰撞檢測
我遇到了這個方法的問題。由於代碼繞過Box2D模擬,因此沒有碰撞響應。因此,精靈可以重疊。我知道Box2D碰撞API提供了一個單位法線向量來幫助解決衝突。然而,這個矢量傳達的方向,但不是數量級。因此,我無法確定我應該移動重疊的精靈多少。有誰知道如何使用Box2D碰撞API手動解決重疊?
我僅將Box2D用於碰撞檢測。我的代碼類似於Ray Wenderlich的教程here。Box2D僅適用於碰撞檢測
我遇到了這個方法的問題。由於代碼繞過Box2D模擬,因此沒有碰撞響應。因此,精靈可以重疊。我知道Box2D碰撞API提供了一個單位法線向量來幫助解決衝突。然而,這個矢量傳達的方向,但不是數量級。因此,我無法確定我應該移動重疊的精靈多少。有誰知道如何使用Box2D碰撞API手動解決重疊?
我不知道iOS的東西,但你想要做的是使用是擴展b2ContactListener並覆蓋PreSolve。
void PreSolve(b2Contact* contact, const b2Manifold* oldManifold);
如果您設置了contact-> SetEnabled(false),將會發生碰撞,但不會起作用。一旦碰撞,你可以做類似於下面的事情。
const b2Manifold * manifold = 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;
}
你如何同步精靈位置與他們身體的位置?你是否踏上了Box2D的世界並將身體位置應用於精靈,或者你是否移動了精靈並將精靈位置應用於身體? – LearnCocos2D 2013-05-01 00:53:34
@ LearnCocos2D我移動精靈並將它們的位置應用到身體。 – 2013-05-01 02:00:20