The normal selection won't be mentioned here. As provided in box2d, a quick selection class with relatively high efficiency is b2QueryCallback.
#ifndef QueryCallback_H#define QueryCallback_H#include
class QueryCallback :public b2QueryCallback{public:QueryCallback(void);QueryCallback(const b2Vec2& point);~QueryCallback(void);bool ReportFixture(b2Fixture* fixture);b2Vec2 m_point;b2Fixture* m_fixture;std::vector
m_vectFixture;};#endif
#include "QueryCallback.h"QueryCallback::QueryCallback(void){}QueryCallback::QueryCallback(const b2Vec2& point){m_point = point;m_fixture = NULL;}QueryCallback::~QueryCallback(void){}bool QueryCallback::ReportFixture(b2Fixture* fixture){b2Body* body = fixture->GetBody();if (body->GetType() == b2_dynamicBody){bool inside = fixture->TestPoint(m_point);if (inside){m_fixture = fixture;m_vectFixture.push_back(fixture);// We are done, terminate the query.return true;}}// Continue the query.return true;}
Using this class, you can quickly select a rigid body for callback, with high efficiency.