转载自:http://www.oasku.com/?question/view/78.html
iphone上如何用box2d实现爆炸效果?
//大概是这样的
b2Vec2 d1;
d1.Set(-0.55f, -0.55f);
b2Vec2 d2;
d2.Set(0.55f, 0.55f);
//检测矩形的左下角和右上角两个点
b2AABB aabb;
aabb.lowerBound= body_box2d->GetPosition()+d1;
aabb.upperBound= body_box2d->GetPosition()+d2;
//遍历世界里的所有对象
QueryCallback callback(body_box2d->GetPosition());
body_box2d->GetWorld()->QueryAABB(&callback, aabb);
if (callback.m_fixture){
//取得和矩形有交点的对象
b2Body* body = callback.m_fixture->GetBody();
b2Vec2 vec = body->GetPosition();
//...
}
//其中QueryCallback是这样的:
class QueryCallback : public b2QueryCallback{
public:QueryCallback(const b2Vec2& point){
m_point = point;
m_fixture = NULL;
}
/// Called for each fixture found in the query AABB.
/// @return false to terminate the query.
bool ReportFixture(b2Fixture* fixture){
b2Body* body = fixture->GetBody();
b2Vec2 vec = body->GetPosition();
//检测框AABB里面有,不算
if(vec.x==m_point.x&&vec.y==m_point.y){
m_fixture = NULL;return TRUE;
}
m_fixture = fixture;
// We are done, terminate the query.
return false;
}
b2Vec2 m_point;
b2Fixture* m_fixture;
};