2014-01-08 4 views
1

Я использую следующий код, чтобы получить расстояние между двумя круглыми телами разного радиуса:В box2d для iOS, как найти расстояние между двумя круговыми телами?

distance = b2Distance(body1->GetPosition(), body2->GetPosition()); 

Я понял, что переменное расстояние хранит расстояние между двумя центрами тел, но не расстояние между границы. Я хочу, чтобы расстояние = 0, когда оба тела касаются друг друга.

Как я могу это сделать? Я пытался этот код, но он не:

b2DistanceInput *distanceInput; 
distanceInput->transformA = body1->GetTransform(); 
distanceInput->transformB = body2->GetTransform(); 
b2DistanceProxy *proxyA; 
proxyA->Set(fixtureBody1->GetShape(), 1); 
b2DistanceProxy *proxyB; 
proxyB->Set(fixtureBody2->GetShape(), 1); 
distanceInput->proxyA = *proxyA; 
distanceInput->proxyB = *proxyB; 
b2DistanceOutput *theDistance; 
b2SimplexCache *cache; 
cache->count = 0; 
b2Distance(theDistance, cache, distanceInput); 

Метод getShape дает плохую ошибку доступа в коде b2box.

Любые идеи?

Спасибо,

Г.А.

ответ

0

Попробуйте использовать этот код - это работает для меня:

b2DistanceInput *distanceInput = new b2DistanceInput(); 
b2DistanceProxy *proxyA = new b2DistanceProxy(); 
b2DistanceProxy *proxyB = new b2DistanceProxy(); 
b2SimplexCache *cache = new b2SimplexCache(); 
b2DistanceOutput *theDistance = new b2DistanceOutput(); 

proxyA->Set(fixtureBody1->GetShape(),1); 
proxyB->Set(fixtureBody2->GetShape(),1); 

distanceInput->transformA = body1->GetTransform(); 
distanceInput->transformB = body2->GetTransform(); 
distanceInput->proxyA = *proxyA; 
distanceInput->proxyB = *proxyB; 
distanceInput->useRadii = true; 

cache->count = 0; 

b2Distance(theDistance, cache, distanceInput); 
+0

Ваш код работал отлично. На самом деле проблема была в распределении памяти. Поскольку я не вызывал новый b2DistanceInput() и другие конструкторы. –